Самоучитель C++ Part 001

Page 210

210

_

Самоучитель_С+

+

/! Класс наследуется как закрытый class derived: private base { int у; public: void setyfint n) { у = n; } r void showy () { cout « у « \n'; }

int raain() ( derived ob; ob.setx(lO); // ОШИБКА — теперь закрыто для производного класса ob.sety(20); // правильный доступ к члену производного класса ob.showxi); // ОШИБКА — теперь закрыто для производного класса ob. showy (); // правильный доступ к члену производного класса return 0;

Как отражено в комментариях к этой (неправильной) программе, функции showx() и setx() становятся закрытыми в производном классе и недоступными вне его. Запомните, что функции showxQ и setx() в базовом классе base по-прежнему остаются открытыми независимо от того, как они наследуются производным классом. Это означает, что объект типа base мог бы получить доступ к этим функциям в любом месте программы. Однако для объектов типа derived они становятся закрытыми. Например, в данном фрагменте: base base_ob; base_ob.setx (1) ; // правильно, поскольку объект base_ob // имеет тип base

вызов функции setx() правилен, поскольку функция setx() — это открытый член класса base, 4. Как мы уже узнали, хотя открытые члены базового класса при наследовании с использованием спецификатора private в производном классе становятся закрытыми, внутри производного класса они остаются доступными. Например, ниже представлена исправленная версия предыдущей программы: // Исправленная версия программы ^include <iostream> using namespace std; class base ( int x; public : void setx(int n) { x = n; }


Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.