- •Обзорные лекции по курсу
- •1.Концепции и методология объектно-ориентированного программирования
- •2.Классы. Конструкторы и деструкторы
- •Void set_a(int num);
- •Void AnyClass::get_a()
- •Int AnyClass::set_a(int num)
- •Конструкторы и деструкторы. Список инициализации элементов
- •Void Show();
- •Int main()
- •Void Show();
- •Int main()
- •Статические члены класса
- •3. Простое и множественное наследование
- •Int GetX(){return X;}
- •Int GetY(){return у;}
- •Int GetX(){return X;}
- •Int GetY(){return y;}
- •Void ShowX(){cout « GetX() « ' ' ;}
- •Void ShowY(){cout « GetY()« ' ';}
- •OutCoord(int _x, int _y): Coord(_x, _y){}
- •Int GetX() {return X;}
- •Int GetY(){return y;}
- •Void ShowX(){cout « GetX() « ' ';}
- •Void ShowY(){cout « GetY()« ' ';}
- •Void ShowX(){cout « Coord::GetX() « ' ';}
- •PrintMsg(int _x, int _y, char* msg): Coord(_x, _y), SaveMsg(msg){}
- •Void set_a(int num);
- •Void AnyClass::get_a()
- •Int AnyClass::set_a(int num)
- •Void Show();
- •Int main()
- •Int GetX() {return X;}
- •PrintMsg(int _x, int _y, char* msg): Coord(_x, _y), SaveMsg(msg){}
- •Упражнения для самопроверки
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 ().
Литература
Глушаков С.В. , Коваль А.В., Черепнин С.А. Язык программирования С++, учебный курс: Харьков: «Фолио Аст», 2001-500 с.
Харви Дейтел, Пол Дейтел, Как программировать на С++: Третье издание. Пер. с англ.-М.: ЗАО «Издательство БИНОМ», 2001 г. -1152 с.: ил.
Баженова И.Ю. 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) Для введения определения класса нужно использовать ключевое слово ______.