virtual

Слово virtual задаёт виртуальную функцию - метод класса, который возможно изменить в классах наследниках. То как будет выполняться метод определится в период исполнения программного кода.

Следовательно, разработчику нет необходимости иметь представление о конкретном типе объекта для работы над ним с помощью виртуальных функций. Хватает информации, что объект, в заявленной функции, относится к некоторому классу или классу наследнику.

Виртуальный метод может быть не реализован вовсе. Класс с таким методом называется абстрактным. Объекты такого класса создавать нельзя. Но можно создавать объекты наследников этого класса.

Для наглядности можно разобрать следующую модель программы.

Определим классы как указано ниже:

Далее выполним такой код:

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

Прописано основное слово virtual до функции n класса Fruit. Данное слово определяет что функция - виртуальная. Следовательно, вызывая a.n(), мы вызовем метод класса Fruit, хоть ссылка направлена на класс Food, потому что a - на самом деле фрукт. А вот b.n() вызовет метод класса Food.

Похожая ситуация наблюдается с указателями

Если метод какого-то класса метод сделали виртуальным, то во всех последующих классах этот метод также останется виртуальным, независимо от наличия слова virtual в них.

Опубликовано

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Капча загружается...