Классы могут бьпъ вложенными. Вложенные классы, подобно вложенным блокам, имеют внутреннюю и внешнюю спецификацию. Правила для вложенных классов изменились по отношению к правилам, существовавшим в С, где разрешались вложенные struct, но имена внутренних structs были видимы извне. Это было концептуально нелогично и теперь исправлено.
Следующие вложенные классы иллюстрируют текущие правила C++:
char с; //внешняя область(контекст)
class X //внешнее объявление класса char с;
{ class У //внутреннее объявление класса
{char с;
void foo (char e) { ::с=Х::с==с=е; }
}
}
В классе Y, функция-член foo, используя с, ссылается на переменную Х : : Y: : с. С использованием оператора разрешения контекста доступны три перемсннык с именем.
Кроме того, внутри блоков могут создаваться полностью локальные классы. Эти определения недоступны вне контекста их локального блока.
void foo()
{ class local { . . . } х; //все что угодно
}
local у; //запрещено: local - внутри контекста foo()
Обратите внимание, что C++ дает вам возможность создавать вложенные функции-члены с использованием вложенных классов. Это – ограниченная форма вложенности функций. Функции-члены должны определяться внутри локального класса и на них нельзя ссылаться вне этого контекста. Как и в С, обычные вложенные функции запрещены.
Static-ЧЛЕНЫ
Члены-данные могут быть объявлены с модификатором класса памяти static. Член-данные, который объявлен static, совместно используется всеми переменными этого класса и хранится уникально, в одном месте. Поэтому возможная форма обращения к нему
имя класса: : идентификатор
обеспечивается тем, что он имеет видимость public. Это – дальнейшее использование оператора разрешения контекста. Статический член глобального класса должен явно определяться в контексте файла. Например:
enum boolean { false, true};
class str
{ char s [100];
public:
static boolean read_only; //объявленный в
//определении класса
static int count strings;
void print();
void assign(const char*) ;
};
int str::count strings; //определено
boolean str: : read only = false; //определено с явной
//инициализацией
УКАЗАТЕЛЬ this
Ключевое слово this представляет собой неявно определенный указатель на сам объект. Он может быть использован только для не статической функции-члена. Ссылка на сам объект не изменяет того факта, что this является указателем. Следовательно,
• this->имя члена указывает на объект, членом которого он является;
• *this представляет собой сам объект и, в зависимости от контекста, может быть лево- или правосторонней величиной;
• this представляет собой адрес объекта.
Простая иллюстрация его использования:
//использование указателя this
#include
class c_pair
{ char cl,c2 ;
public:
void init(char b) { c2 =b; cl = 1+b; }
c_pairs increment() { cl++; c2++; return(*this); )
void* where am I() { return (this); }
void print() { cout<
Похожие записи
No user прокомментировали сообщение
Оставить комментарий