Описание класса может быть вложенным. Например:
class set { struct setmem { int mem; setmem* next; setmem(int m, setmem* n) { mem=m; next=n; } }; setmem* first; public: set() { first=0; } insert(int m) { first = new setmem(m,first);} // ... };
Если только вложенный класс не является очень простым, в таком описании трудно разобраться. Кроме того, вложение классов - это не более чем соглашение о записи, поскольку вложенный класс не является скрытым в области видимости лексически охватывающего класса:
class set { struct setmem { int mem; setmem* next; setmem(int m, setmem* n) }; // ... };
setmem::setmem(int m, setmem* n) { mem=m, next=n} setmem m1(1,0);
Такая запись, как set::setmem::setmem(), не является ни необходимой, ни допустимой. Единственный способ скрыть имя класса - это сделать это с помощью метода файлы-как-модули. Большую часть нетривиальных классов лучше описывать раздельно:
class setmem { friend class set; // доступ только с помощью членов set int mem; setmem* next; setmem(int m, setmem* n) { mem=m; next=n; } };
class set { setmem* first; public: set() { first=0; } insert(int m) { first = new setmem(m,first);} // ... };