![]() |
Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | |
|
При наследовании классов важную роль играет статус доступа компонента.
В иерархии классов (при наследовании) относительно доступности компонент принято следующее соглашение:
1) Собственные (private) методы и данные доступны только внутри класса, где они определены.
2) Защищенные (protected) компоненты доступны внутри класса, где они определены, и также доступны во все производных классах.
3) Общедоступные (public) компоненты класса – глобальны, т.е. доступны из любой точки программы.
На доступность компонент влияет также выбор ключевого слова (class, struct, union), с помощью которого объявлен класс.
Следует обратить внимание, что ни базовый, ни производный класс не могут быть объявлены с помощью union.
Классы union не могут использоваться при наследовании!
Определение производных классов:
сlass T: X, Y, Z {…};
Класс T – потомок базовых классов X, Y, Z, из которых он наследует компоненты и методы.
Наследуются методы и данные со статусом доступа public и protected!
При этом,
- еслипроизводныйкласс имеет спецификатор class, то компоненты родителя получают по умолчанию в классе потомке статус - private.
- если это struct – унаследованные компоненты имеют статус public.
class A { protected: int x;
public: float y;…};
class B: A {... }; // x, y наследуются как private
struct C: A {...}; // x, y наследуются как public
Изменить статус доступа, получаемый по умолчанию можно опять с помощью спецификаторов public, protected и private.
class D: protected A {... }; // x, y наследуются как protected
class E: public A {... }; //x наследуются как protected, а y как public
class M: private A {... }; // x, y наследуются как private
struct N:: protected A {...}; // x, y наследуются как protected
struct P: public A {... }; // x наследуются как protected, а y как public
struct N:: private A {...}; // x, y наследуются как private
Пример:
…
class A { //базовый класс
int x // закрытое данное класса А
public:
A(int xx =0) { x=xx; cout<< “ A! ”;} // конструктор класса А
int GetX () {return x;} // функция-член класса А
~A () {cout<<endl<<”DA ”; } // деструктор класса А
};
class B: public A { // производный от А класс B
int y; // закрытое данное класса B
public:
B (int yy=0) { y = yy; cout << “ B! ”; } // конструктор класса B
int GetY { return y;} // функция-член класса B
~B () { cout<< “ DB “; } // деструктор класса B
};
Дата публикования: 2014-11-28; Прочитано: 200 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!