Уровни доступа к базовому классу
Те же ключевые слова private, public и protected используются для указания уровня доступа к базовому классу. До этого мы писали:
class Employee: public Person
и выше говорилось, что в этом случае у производного класса будет доступ к публичным полям и методам базового класса. Такой тип наследования можно назвать открытым. В случае закрытого (private) и защищјнного (protected) наследования ситуация будет другой, что показано
в таблице:
Class C { private: int a; protected: int b; public: int c; }; | Class C1: public C { недоступно доступно как protected доступно как public }; | Class C2: protected C { недоступно доступно как protected доступно как protected }; | Class C3: private C { недоступно доступно как private доступно как private }; |
Легко запомнить правило: приватные члены базового класса в производных классах недоступны; остальные члены доступны с минимальным из двух уровней доступа: их уровня доступа в базовом классе и уровня доступа к базовому классу при наследовании. Если уровень доступа к базовому классу не указан, то для структур по умолчанию используется уровень public, а для классов private.
17. Ссылка на себя //this
В функции-члене можно непосредственно использовать имена членов того объекта, для которого она была вызвана:
class X {
int m;
public:
int readm() { return m; }
};
void f(X aa, X bb)
{
int a = aa.readm();
int b = bb.readm();
//...
}
При первом вызове readm() m обозначает aa.m, а при втором - bb.m.
У функции-члена есть дополнительный скрытый параметр, являющийся указателем на объект, для которого вызывалась функция. Можно явно использовать этот скрытый параметр под именем this. Считается, что в каждой функции-члене класса X указатель this описан неявно как
X *const this;
и инициализируется, чтобы указывать на объект, для которого функция-член вызывалась. Этот указатель нельзя изменять, поскольку он постоянный (*const). Явно описать его тоже нельзя, т.к. this - это служебное слово. Можно дать эквивалентное описание класса X:
class X {
int m;
public:
int readm() { return this->m; }
};
Для обращения к членам использовать this излишне. В основном this используется в функциях-членах, непосредственно работающих с указателями.
Освобождение памяти от лишних объектов
delete и ну ты понел.
Порядок выполнения конструкторов и деструкторов
Конструкторы при инициализации (создание).
Деструкторы при деинициализации (уничтожение).