Шаг 105 - Виртуальные функции, продолжение

Продолжим изучение наших виртуальных функций. Первый вопрос, а можно ли вызывать виртуальную функцию предка в переопределенной функции. Можно. Вот пример.

class Test2 : public Test1
{
public:
	void include();
};

void Test2::include()
{
	Test1::include(); 	// метод предка.
	cout << "Test2"  << endl;
}

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

Результат будет такой. Метод предка вызовется.

Start Print
Test1
Test2
Cansel Print
Press any key to continue

А если еще раз унаследовать ? Вообщем то без разницы хоть сто раз. Вы сможете переопределить эту функцию или использовать метод любого предка.

......

class Test3 : public Test2
{
public:
	void include();
};

void Test3::include()
{
	Test1::include();		// самый первый
	Test2::include();		// второй
	cout << "Test3" << endl;	// новый
}

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

Теперь вот так они вызываются.

Start Print
Test1
Test1
Test2
Test3
Cansel Print
Press any key to continue

Обратите внимание на то, что слово virtual нужно указать только один раз, при дальнейшем наследовании классы знают, что есть такое слово и функция может быть переопределяемая. Можете воспринимать это слово virtual как указатель на множество функций. Вы можете свой указатель добавить определи новый класс. И имея этот указатель вызывать нужную функцию.

105_1.gif (1673 b)


Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем - 15.07.2001