728 Глава 12

	Тип наследования
protected	protected в произ	protected в произ	private в произв'
	водном классе	водном классе	ном классе
	Может быть досту	Может быть досту	Может быть досту
	пен непосредственно любым нестати	пен непосредственно любым нестати	пен непосредственно любым нестати
	ческим функци	ческим функци	ческим функци
	ям-элементам и	ям-элементам и	ям-элементам и
	дружественным функциям.	дружественным функциям.	дружественным функциям.
private	невидим в произ	невидим в произ	невидим в произ
	водном классе	водном классе	водном классе
	Может быть досту	Может быть досту	Может быть досту
	пен нестатическим	пен нестатическим	пен нестатическим
	функциям-элемен	функциям-элемен	функциям-элемен
	там и дружественным функциям че	там и дружественным функциям че	там и дружественным функциям че
	рез открытые или защищенные функции-элементы базо	рез открытые или защищенные функции-элементы базо	рез открытые или защищенные функции-элементы базо
	вого класса.	вого класса.	вого класса.

Если в классе — наследнике переопределить функцию — элемент (ввести но
вую функцию с тем же именем), то для объектов этого класса новая функция отме
нит родительскую. Если обращаться к объекту этого класса, то вызываться будет
новая функция. Если все-таки нужно вызвать именно функцию базового класса
надо использовать операцию разрешения области действия.

Пусть, например, вы создали класс форм Shape:

class Shape

{

public:

void Draw(void);

};

и наследующий ему класс кругов Circl:

class Circl : public Shape

f

public:

void Draw(void);

в каждом из классов объявили метод рисования Draw, а затем в программе выпол-
нили операторы

Shape *PQ1 = new Shape;

PQl->Draw();             // вызов Draw класса Shape
Circl *PQ2 = new Circl;

PQ2->Draw();             // вызов Draw класса Circl
PQ2->Shape::Draw();      // вызов Draw класса Shape
((Shape *)PQ2)->Draw();  // вызов Draw класса Shape

В комментариях к коду указано, функции Draw каких классов вызывают эти
операторы. Как видно, если мы обращаемся через указатель к самому объекту
типа Circl, то вызывается переопределенная в нем функция. Но если мы обраща
емся к нему как к объекту базового класса (последний из приведенных операторов)