C++ C++ C# C# ASP.NET Security ASP.NET Security ASM ASM Скачать Скачать Поиск Поиск Хостинг Хостинг  
  Программа для работы с LPT портом...
Язык: .NET — ©Alexey...
  "ASP.NET Atlas" – AJAX в исполнении Micro...
Язык: .NET — ©legigor@mail.ru...
  "Невытесняющая" Многопоточность...
Язык: C/C++ — ©...
  01.05.2010 — Update World C++: Сборник GPL QT исходников
  15.12.2007 — Весь сайт целиком можно загрузить по ссылкам из раздела Скачать
Хостинг:
Windows 2003, ASP.NET 2.0
бесплатный и от 80 руб./мес


   Отправить письмо
Кулабухов Артем, Беларусь




 104 - Виртуальные функции / MSDN rus / Visual C++

Шаг 104 - Виртуальные функции

Я напишу попроще, более подробное описание можно найти в "Шаг 6 - Полиморфизм", "Шаг 10 - Виртуальные (virtual) функции, раннее и позднее связывание". Итак, зачем нужны виртуальные функции? Использовать их очень удобно при многочисленном наследовании. МЫ можем подготовить некий класс, реализовав его функциональность. Но мы не знаем какие требования будут у разработчика в следующий раз. Используя виртуальные функции мы можем расширить наш класс для добавления новой функциональности. Смотрим простой пример класса, который что-то печатает. Например, колонтитулы:

#include "stdafx.h"
#include "iostream.h"

class Test1
{
public:
	void print();
	virtual void include(); // переопределяемая функция
};

void Test1::print()
{
	cout << "Start Print" << endl;
	include();		// в будующих реализация сюда включат код
	cout << "Cansel Print " << endl;
}

void Test1::include()  // в будующих реализация сюда включат код
{
     cout << "Test1" << endl;
}

class Test2 : public Test1
{
public:
	void include();	  // переопределили
};

void Test2::include() 	// наша реализация
{
	cout << "Test2" << endl;
}

void main()
{
Test2 t;
t.print(); 
}

Выполнение программы будет такое.

Start Print
Test2
Cansel Print
Press any key to continue

Совершенно тривиальная идея. Функция которую можно переопределить в новом классе. А если ее не переопределять? То вызовется функция предка.

............
class Test2 : public Test1
{
};

void main()
{
Test2 t;
t.print(); 
}

Результат будет такой.

Start Print
Test1
Cansel Print
Press any key to continue

То есть вызовется метод предка.


| |
Автор Каев Артем.
[AD]