Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
1-15.docx
Скачиваний:
1
Добавлен:
01.05.2025
Размер:
106.86 Кб
Скачать

5. Виртуалдық базалық класстар.(2,5) Жиындық мұра лық ету. (I 10)

Кейбір жағдайларда ағалық класстар ортақ мәліметке ие болуы керек. Қанша дегенмен С++ тип жағынан келгенде қатал сыншы болып табылады, мәліметтердің ортақтығы тек айқын нұсқауышта болуы мумкін,яғни класста ортақ болады. Мұндай нұсқауыш қызметін виртуалды базалық класс атқара алады.

Виртуалды базалық классты бастапқы класстың ұсынылуы ретінде қарастыруға болады,оны турлі тәсілдермен көрсетуге болады:

class window {

// бастапқы мәлімет

virtual void draw();

};

Қарапайымдылық үшін ортақ мәлімет түрін кластан window - draw() функциясы арқылы корсетейік.

Бұдан айқынырак басқа да класстарды анықтауға болады. Мысалы:

class window_w_border : public virtual window {

// класс "окно с рамкой"

// определения, связанные с рамкой

void draw();

};

class window_w_menu : public virtual window {

// класс "окно с меню"

// определения, связанные с меню

void draw();

};

Енді терезе мен мәзірді анықтайық:

class window_w_border_and_menu

: public virtual window,

public window_w_border,

public window_w_menu {

// класс "окно с рамкой и меню"

void draw();

};

Туынды класс терезеге жаға өзгертулер енгізеді. Өзгертулер комбинациясын қолдану үшін біз window классының белгілі объектісі базалық window классына кіруінің ұсынылуын білуіміз керек. Осы арқылы біз window сипатталуын барлық туынды класста виртуалды базалық класс арқылы қамтамасыз етілуін көреміз.

Класс - это пользоваельский тип. Этот раздел знакомит с основными средствами определения класса,

создания его объектов, работы с такими объектами и, наконец, удаления этих объектов после

использования

Множественное наследование

Что такое множественное наследование? Это когда производный класс использует

несколько базовых классов. Другими словами производный класс может иметь любое число

базовых классов, не обязательно один.. В действительности,

протокол класса представлен следующим образом: class iostream : public istream, public

ostream. То есть класс iostream является public-производным от двух базовых istream и

ostream.

Так как Вы уже не впервые сталкиваетесь с понятием наследование, то заострю Ваше

внимание лишь на тонкостях использования механизма множественного наследования. Итак,

пример. В примере используется два базовых класса Base1 и Base2, от которых наследуется

класс Derived. Отметим тот момент, что в примере нет особенного смысла в именах

переменных или их типах. Целью этого примера является ознакомление с механизмом

множественного наследования. Проанализируйте пример, познакомитесь с новым

синтаксисом при множественном наследовании.

#include <iostream.h>

#include <string.h>

class Base1{//базовый класс

private:

int idNumber;// идентификационный номер

public:

Base1(){// конструктор по умолчанию

idNumber=0;

cout<<"Constructor for class Base1\n";

}

Base1(int tNum){// конструктор с одним аргументом

idNumber=tNum;

cout<<"Constructor for class Base1\n";

}

void setID(int tNum){// функция устанавливает значение idNumber

idNumber=tNum; }

int getID(){// функция возвращает значение idNumber

return idNumber; }

};

class Base2{//базовый класс

private:

char Name[20];// имя

public:

Base2(){// конструктор по умолчанию

strcpy(Name,"None");

cout<<"Constructor for class Base2\n";

}

Base2(char* tName){// конструктор с одним аргументом

strcpy(Name,tName);

cout<<"Constructor for class Base2\n";

}

void setName(char* tName){// функция устанавливает значение Name

strcpy(Name,tName);

}

char* getName(){// функция возвращает значение Name

return Name;

}

};

6. Виртуалдық деструкторлар. (2,7) Модификатор константы.

Деструктор әрқашанда виртуалды болып жасалады. Ол тек қана сол берілген класстын объектілерін ғана емес, оның туындыларын да орынды ,жадыға нұқсан келтірмей, жою үшін істеледі.

Деструктор – бұл берілген класстың нақты объектілерімен байланысқан ресурстарды босату үшін қолданылатын арнайы функция-мүшелер. Дестукторлар класс объектілерін автоматты түрде бұзады (разрушение). Форматы:

class className

{ public:

className(); // үнсіздік бойынша конструктор

// басқа конструкторлар

~className(); // деструкторды хабарлау

// басқа функция-мүшелер };

Деструкторлар қасиеттері

  • Деструктор – объектіні жою кезінде шақырылатын әдіс

  • Аты класс атымен сәйкес келеді, ~ белгісінен басталады

  • Параметрлері жоқ

class Complex

{ …

public:

~Complex()

{

}}

  • Деструкторда файлдарды жабуға және жадыны босатуға болады.

Қосымша

  • new операторы конструкторды, ал delete – деструкторды шақырады

  • Динамикалық жадыны қолдану, яғни жады компиляция кезінде емес, программаны қосу кезінде анықталады.

  • new опрератоы барлық мәліметтер типтері үшін жұмыс істейді

Модификатор const

Константы в Си можно задавать двумя способами: с помощью директивы #define препроцессора. Например, строка

#define MILLENIUM 1000

задает символическое имя MILLENIUM для константы 1000. Препроцессор всюду в тексте заменяет это имя на константу 1000, используя текстовую подстановку. Это не очень хороший способ, поскольку при таком задании отсутствует контроль типов;

C помощью модификатора const. При описании любой переменной можно добавить модификатор типа const. Например, вместо #define можно использовать следующее описание:

const int MILLENIUM = 1000;

Модификатор const означает, что переменная MILLENIUM является константой, т.е. менять ее значение нельзя. Попытка присвоить новое значение константе приведет к ошибке компиляции

MILLENIUM = 100; // Ошибка: константу нельзя изменять

При описании указателя модификатор const, записанный до звездочки, означает, что описан указатель на константный объект, т.е. на объект, менять который нельзя или запрещено. Например, в строке

const char *p;

описан указатель на константную строку (массив символов, менять который запрещено).

Указатели на константные объекты используются в Си чрезвычайно часто. Причина состоит в том, что константный указатель позволяет прочесть объект и при этом гарантирует, что объект не будет испорчен в результате ошибки программирования, т.к. константный указатель не дает возможности изменить объект.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]