1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
//Листинг #1 Наследование class A { }; class B: public A //класс B наследуется из класса A { }; A obj1; //obj1 есть объект класса A B obj2; //obj2 есть объект класса B int main() { } |
Незнание любого из этих материалов может привести только к потраченному зря времени.
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 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
//Листинг #2 Наследование clang #include <conio.h> #include <iostream> using namespace std; class A { int x; //x является элементом класса A и доступен только внутри своего класса public: void get_x(int); //Прототип функции, через которую в вышеобъявленный x присваивается значение void show_x(); //Прототип функции, выводящей x на экран }; class B: public A //класс B наследуется из класса A { }; //Определяю функции из класса вне своего класса. void A::get_x(int X) { x = X; //x и X различны. т.к. регистр разный. x- элемент класса, в X принимается параметр } void A::show_x() { cout <<x << endl; //Вывод x на экран } A obj1; //obj1 есть объект класса A B obj2; //obj2 есть объект класса B int main() { // clrscr(); int value = 10; //value будет передаваться в функцию в качестве параметра obj1.get_x(value); //Эстафета по классу A: value->X X->x obj1.show_x(); //x из класса A выводится на экран //свойства и функциональность родительского класса заимствуются новым классом value = 20; obj2.get_x(value); //Эстафета по классу B: value->X X->x obj2.show_x(); //x из класса B выводится на экран у cin.get(); } |
Чтобы достучаться до сокрытой классом части класса, нужно использовать посредника, открытого классом внешнему миру. В роли такого посредника выступит метод get_x(int) из класса A. Для работы с защищённой от внешнего мира переменной класса x используется функции-посредник: она вытаскивает значение. Сейчас значение выводится на экран.
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 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
//Листинг #3 Наследование clang #include <conio.h> #include <iostream> using namespace std; class A { int x; //x является элементом класса A и доступен только внутри своего класса public: void get_x(int); //Прототип функции, через которую в вышеобъявленный x присваивается значение void show_x(); //Прототип функции, выводящей x на экран }; class B: public A //класс B наследуется из класса A { public: void show_hello() //В класс-наследник была добавлена функция вывода на экран Hello { cout << "Hello" << endl; } }; //Определяю функции из класса вне своего класса. void A::get_x(int X) { x = X; //x и X различны. т.к. регистр разный. x- элемент класса, в X принимается параметр } void A::show_x() { cout << x << endl; //Вывод x на экран } A obj1; //obj1 есть объект класса A B obj2; //obj2 есть объект класса B int main() { //clrscr(); int value = 10; //value будет передаваться в функцию в качестве параметра obj1.get_x(value); //Эстафета по классу A: value->X X->x obj1.show_x(); //x из Класса A выводится на экран //свойства и функциональность родительского класса заимствуются новым классом value = 20; obj2.get_x(value); //Эстафета по классу B: value->X X->x obj2.show_x(); //x из класса B выводится на экран у // obj1.show_hello(); //Потомок родителю не дает ни копейки, так не выйдет obj2.show_hello(); //На экран выведется Hello. Это функция из класса B getch(); } |
Думаю, это можно не демонстрировать, вы сами сможете легко посмотреть поведение программы в такой ситуации.
1 |
class ИмяКлассаПотомка: метод доступа ИмяКлассаРодителя {методы потомка}; |
Спасибо, все очень понятно!
Конструкция наследования class ИмяКлассаРодителя: метод доступа ИмяКлассаПотомка {методы потомка};
Может наоборот?
Конструкция наследования class ИмяКлассаПотомка: метод доступа ИмяКлассаРодителя {методы потомка};
Да, так. Спасибо.