Программирование >>  Программирование на языке c++ 

1 ... 42 43 44 [ 45 ] 46 47 48 ... 159


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, но выполняет и некото-



1 ... 42 43 44 [ 45 ] 46 47 48 ... 159

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика