Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АрхитектураБиологияГеографияДругоеИностранные языки
ИнформатикаИсторияКультураЛитератураМатематика
МедицинаМеханикаОбразованиеОхрана трудаПедагогика
ПолитикаПравоПрограммированиеПсихологияРелигия
СоциологияСпортСтроительствоФизикаФилософия
ФинансыХимияЭкологияЭкономикаЭлектроника

Виртуальные функции.

Конструкторы и деструкторы. Конструкторы копирования по умолчанию. | Объекты как аргументы методов и доступ к их числам. | Размещение в памяти членов объектов одного класса и способ создания общих полей (св-в). | Константные методы, их аргументы и константные объекты. | Строки на основе массива типа char и класса string | Перегрузка бинарных операций | Преобразование типов от основного к пользовательскому. | Предотвращение преобразования типов от основного к пользовательскому с помощью конструктора | Базовый и производный классы. Конструкторы производного класса. Перегрузка методов при наследовании. Алгоритм выбора перегруженного метода. | Указатели. Инициализация. Арифметические операции. |


Читайте также:
  1. Алгоритм нахождения точек экстремума по первому признаку экстремума функции.
  2. Виртуальные реальности
  3. Виртуальные ресурсы территорий как туристских дестинаций
  4. Воображение: определение, виды, функции. Роль воображения в решении познавательных и личностных проблем. Роль игры в развитии воображения. Воображение и творчество.
  5. Вопрос № 54: Органы ФСБ России: их задачи и функции.
  6. Вопрос № 62 и 63: Судебная власть: природа и функции. Понятие правосудия и его конституционные признаки.

Виртуальный означает видимый, но не существующий в реальности. Когда используется виртуальная ф-ия, прог-а которая вызывает ф-ию одного класса, может в этот момент вызывать ф-ию совсем другого класса. Абсолютно разные ф-ии выполняются с помощью одного и того же вывода. Это связано с полиморфизмом. Полиморфизм – различные формы. Чтобы использовать полиморфизм: 1. Все классы должны являться наследниками одного базового. 2. Ф-ия должна быть объявлена виртуальной (virtual) в базовом классе.

Рассмотрим программу:

class Base //Базовый класс

{

public:

virtual void show() //Виртуальная функция

{ cout << "Base\n"; }

};

class Derv1: public Base //Производный класс 1

{

public:

void show()

{ cout << "Derv1\n"; }

};

class Derv2: public Base //Производный класс 2

{

public:

void show()

{ cout << "Derv2\n"; }

};

int main()

{

Derv1 dv1; //Объект производного класса 1

Derv2 dv2; //Объект производного класса 2

Base* ptr; //Указатель на базовый класс

ptr = &dv1; //Адрес dv1 занести в указатель

ptr->show(); //Выполнить show()

ptr = &dv2; //Адрес dv2 занести в указатель

ptr->show(); //Выполнить show()

return 0;

}

Результат:

Derv1

Derv2

Базовый класс, который никогда на будет реализован, называется абстрактным классом. Он служит звеном для создания иерархической структуры классов. Объекты родительского класса не предназначены для реализации. Поэтому используют числовую виртуальную ф-ию. Это ф-ия, после объявления которой добавляется выражение =0.

virtual void show() = 0; //чистая виртуальная

0 не присваивается.

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

Пр.:

class Base

{

public:

virtual ~Base() //виртуальный деструктор

{ cout << "Base удален\n"; }

};

class Derv: public Base

{

public:

~Derv()

{ cout << "Derv удален\n"; }

};

int main()

{

Base* pBase = new Derv;

delete pBase;

return 0;

}

Результат:

Derv удален

Base удален

Чтобы объекты порожденных классов удалялись правильно, следует всегда делать деструкторы в базовых классах виртуальными.

 


Дата добавления: 2015-08-17; просмотров: 62 | Нарушение авторских прав


<== предыдущая страница | следующая страница ==>
Управление памятью. Операции new и delete. Указатель this.| Дружественные функции.

mybiblioteka.su - 2015-2024 год. (0.006 сек.)