1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
//Листинг #1 public-наследование class A { private: int x; public: int y; protected: int z; }; class B:public A { public: void update() //Открытая для программы функция { x = 100; //хотя private унаследован, в потомке он только ест память. Будет ошибка y = 100; //y из класса B стало равным 100 z = 100; //z из класса B стало равным 100 } }; class C:public B //Класс С является классом-потомком на основе класса B { public: void update() //Открытая для программы функция { //x=100; //хотя private унаследован, в потомке он только ест память. Будет ошибка y=100; //y из класса C стало равным 100 z=100; //z из класса C стало равным 100 } }; |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
//Листинг #2 private-наследование class A { private: int x; public: int y; protected: int z; }; class B:private A { public: void upate() { //x = 100; //хотя private унаследован, в потомке он только ест память. Будет ошибка y = 200; //y определился как объявленный в private внутри класса B z = 200; //z определился как объявленный в private внутри класса B } }; class C:public B //Пытаемся создать потомок созданного класса B { public: void update() { //x=300; //Нельзя напрямую обратиться к private элементу унаследованному от родителя //y=300; //Нельзя напрямую обратиться к private элементу унаследованному от родителя //z=300; //Нельзя напрямую обратиться к private элементу унаследованному от родителя } }; |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
//Листинг #3 protected-наследование class A { private: int x; public: int y; protected: int z; }; class B:protected A { public: void update() { //x=999; //Нельзя обратиться напрямую к private элементу унаследованному от родителя y=999; //y определился как объявленный в protected внутри класса B z=999; //z определился как объявленный в protected внутри класса B } }; class C:public B { public: void update() { // x = 777; //Нельзя обратиться напрямую к private элементу унаследованному от родителя y = 777; //y определился как объявленный в protected внутри класса C z = 777; //z определился как объявленный в protected внутри класса C } }; |
Очень хорошая статья. Автору большое спасибо
Спасибо.
Ссылку поправь на «Знакомство с protected (модификатор доступа внутри класса)»
Исправил. Спасибо
Сижу разбираюсь в этой теме, смутила фраза «Нельзя обратиться к private элементу унаследованному от родителя».
Пришёл к выводу, что можно, если обратиться к нему через унаследованную аксессорную функцию 🙂
Давайте пример, что ли. Пример -то понагляднее будет чем выбрасывание терминов типа: «аксессорные функции»
Ну как-то так:
На экране будет:
i=777
j=666
я исправлю в этих записях, что напрямую нельзя. Моя неточность.
что еще заметите, пишите. Спасибо.