|
Программирование >> Программирование на языке c++
pb->display(); С++ and Object-Oriented Programming pb = pp = &p; cout pb->retjevel(); ошибка: retjevel is not a member of book cout endl pp->ret level() endl; 0 cout pp->ret title(); The beginner Guide to С++ вызов функции book::display() для базового объекта pb->display(); The beginner Guide to С++ вызов programmers guide::display() для производного объекта pp->display(); The beginner Guide to С++ 0 pp = &b; ошибка Вторая программа показывает передачу указателя на базовый и производный классы в функции fl и f2. #include <iostream.h> class book { базовый класс char *title; public: void set data(char *t) { title=t; } void displayO { cout endl title; } class programmers guide: public book { производный класс int level; public; void set data(char *t,int I) { book::set data(t); level=l; } void displayO { book::display(); cout \t level endl; } void f 1(book *p) { p-> displayO; } void f2(programmers guide *p) { p -> displayO; } void main(void) { book b,*pb; programmers guide р, *рр; b.set data( C++ and Object-Oriented Programming ); p.set data( The beginner Guide to C-t-t- ,0); pb = &b; PP = &p; f1(pb); Результат: С++ and Object-Oriented Programming f1{PP); Результат: The beginner Guide to С++ f2(pb); ошибка: cannot convert book to programmers guide f2(pp); Результат: The beginner Guide to С++ 0 Третья программа демонстрирует трехуровневую иерархическую структуру вида: А (базовый класс) <- В (производный и в то же время базовый класс) <- С (производный класс). #include <iostream.h> class А { базовый класс int а; public: void set(int v) { a=v; } void pr{) { cout a endl; } class В : public A { производный и он же базовый класс int b; public: void set(int v) { A::set(2*v); b=v; } void pr{) { cout b endl; } class С : public В { производный класс int с; public: void set(int v) { B::set(3*v); c=v; } void pr() { cout с endl; } void main(void) { А аа, *ра; В bb; Ссс; aa.set(10); bb.set(IOO); cc.set(IOOO); aa.prO; bb.prO; cc.prO; pa=&bb; pa->pr{); pa=&cc; pa->pr(); Результат: Результат: Результат: 1000 Результат: 200 Результат: 6000 Перечислим основные правила использования базовых и производных классов: язык С++ позволяет строить иерархические структуры, в которых один класс наследуется из другого. Наследуемый класс (ребенок) называется производным, а класс, из которого наследуется ребенок (родитель), - базовым; взаимосвязи между базовыми и производными классами выражаются графически с помощью стрелок, которые идут от производных классов к базовым; пусть функция F принадлежит базовому классу Б. Тогда в производном классе П (Б <- П) можно: 1) полностью заменить функцию F, т. е. объявить ее с тем же именем, но выполняющую другие действия. В результате появляются две разные версии одной и той же функции - старая B::F и новая П::Е. Это позволяет построить производный класс на основе базового, но в то же время сделать его лучше; 2) доопределить (частично изменить) функцию F, т. е. объявить ее с тем же именем, но в ее теле где-то вызвать функцию F базового класса (см., например, функцию set(...) в последнем примере). В этом,случае n::F делает то же, что и B::F, но выполняет и некото-
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |