Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
50
Добавлен:
16.02.2016
Размер:
196.61 Кб
Скачать

Int GetX() {return X;}

int GetY() {return y;}

void SetX(int _x){x = _x;}

void SetY(int _y){y = _y;}

};

class SaveMsg

{

char Message[80];

public:

SaveMsg(char* msg){SetMsg(msg);}

void SetMsg(char* msg) {strcpy(Message, msg);}

void ShowMsg() {cout « Message;}

};

class PrintMsg: public Coord, public SaveMsg

{

public:

PrintMsg(int _x, int _y, char* msg): Coord(_x, _y), SaveMsg(msg){}

void Show();

};

void

PrintMsg::Show()

{

gotoxy(GetX() , GetY());

ShowMsg();

}

main()

{

PrintMsg * ptr;

ptr =new PrintMsg(10, 5, "Множественное ");

ptr->Show() ;

ptr->SetX(25);

ptr->SetY(5);

ptr->SetMsg("наследование");

ptr->Show();

delete ptr;

return 0;

}

В этом примере класс Coord отвечает за хранение и установ­ку значений координат на экране, класс SaveMsg хранит и уста­навливает сообщение, а класс PrintMsg, являющийся произ­водным от них, выводит это сообщение на экран в заданных ко­ординатах. Этот пример демонстрирует также, как осуществля­ется передача параметров конструкторам базовых классов. При множественном наследовании, как и при простом, конструкторы базовых классов вызываются компилятором до вызова конструк­тора производного класса. Единственная возможность передать им аргументы — использовать список инициализации элементов. Причем порядок объявления базовых классов при наследовании определяет и порядок вызова их конструкторов, которому должен соответствовать порядок следования конструкторов базовых классов в списке инициализации. В данном случае класс PrintMsg содержит такое объявление о наследовании:

class PrintMsg: public Coord, public SaveMsg

Этому объявлению соответствует следующий конструктор:

PrintMsg(int _x, int _y, char* msg): Coord(_x, _y), SaveMsg(msg){}

В основной программе этому конструктору передаются аргу­менты при создании объекта класса PrintMsg с помощью опе­ратора new:

ptr = new PrintMsg(10, 5, "Множественное ");

Выполнение функции-члена Show() приводит к выводу на экран в указанных координатах сообщения, заданного третьим аргументом.

Следующие за этим вызовы функций-членов SetX (), SetY () и SetMsg () приводят к установке новых значений ко­ординат и нового сообщения, которое выводится повторным вы­зовом функции Show ().

Литература

  1. Глушаков С.В. , Коваль А.В., Черепнин С.А. Язык программирования С++, учебный курс: Харьков: «Фолио Аст», 2001-500 с.

  2. Харви Дейтел, Пол Дейтел, Как программировать на С++: Третье издание. Пер. с англ.-М.: ЗАО «Издательство БИНОМ», 2001 г. -1152 с.: ил.

  3. Баженова И.Ю. VisualC++6.0(VISUALSTUDIO98).Уроки программирования.-М.: Диалог-МИФИ, 2001-416 с.

Упражнения для самопроверки

1)__________ является специальной функцией-членом, используемой для задания начальных значений данным-членам класса.

2) Набор открытых функций –членов класса рассматривается как __________ класса.

3) Реализация класса скрыта от его клиентов или ____________.

4) Члены класса указанные как _________ , доступны везде в области действия объекта класса.

5) Найдите и исправьте ошибку в классе Time, где объявлен следующий прототип:void~Time(int);

6) Найдите и исправьте ошибку во фрагменте определения класса Time:

class Time

{

public:

//прототипы функций

private:

int hour=0;

int minute = 0;

int second=0;

};

7) Операция______динамически выделяет память для объекта указанного типа и возвращает _________ на этот тип.

8) Операция ______ освобождает память, выделенную перед этим с помощью операции new.

9) Создайте простое определение класса Time. Класс должен содержать закрытые переменныеhour(час),minute(минута),second(секунда) типаint, а также члены –функцииsetTime(int,int,int)- для установки текущего времени и функцию печати времени в стандартном форматеprintStandard().

10) Для введения определения класса нужно использовать ключевое слово ______.

25

Соседние файлы в папке ЛекцииКарасева