ВУЗ:
Составители:
Рубрика:
Андрианова А.А., Исмагилов Л.Н., Мухтарова Т.М.
умолчанию выбор вызываемой функции осуществляется в соответствии с
типом указателя или ссылки. В случае вызова виртуальной функции через
указатель или ссылку на базовый класс программа будет использовать
метод, определенный для типа объекта, а не метод, определенный для
типа указателя или ссылки.
Допустим, метод Print() класса Student является виртуальным.
Он выводит информацию об одном студенте. Это осуществляется
добавлением в начало объявления метода в базовом классе ключевого
слова virtual:
virtual void Print();
В классе ContractStudent этот метод переопределяется,
распечатывая также информацию о задолженностях студента по оплате
обучения.
Продемонстрируем работу виртуального метода на примере:
Student ivan("Иванов Иван Иванович", 1, 1, 1990, 111);
ContractStudent petr("Петров петр Петрович",
2, 2, 1990, 222, 50000.0);
Student* pStud;
pStud = &ivan; // указателю на базовый класс присваивается
// адрес объекта класса Student
pStud -> Print(); // вызов метода Print() класса Student
pStud = &petr; // указателю на базовый класс
// присваивается адрес объекта
//класса ContractStudent
pStud -> Print(); // вызов метода Print()
// класса ContractStudent
В данном случае две одинаковые строки кода будут приводить к
вызову двух разных методов базового и производного классов
соответственно.
Конструкторы классов не могут являться виртуальными функциями,
поскольку производным классом не наследуется конструктор базового
класса.
Деструктор класса должен быть виртуальным, если при
уничтожении объекта производного класса происходит освобождение
ресурсов, которые использовались в нем. Виртуальность деструктора
проявляется в случае создания объекта с помощью операции выделения
108
Андрианова А.А., Исмагилов Л.Н., Мухтарова Т.М.
умолчанию выбор вызываемой функции осуществляется в соответствии с
типом указателя или ссылки. В случае вызова виртуальной функции через
указатель или ссылку на базовый класс программа будет использовать
метод, определенный для типа объекта, а не метод, определенный для
типа указателя или ссылки.
Допустим, метод Print() класса Student является виртуальным.
Он выводит информацию об одном студенте. Это осуществляется
добавлением в начало объявления метода в базовом классе ключевого
слова virtual:
virtual void Print();
В классе ContractStudent этот метод переопределяется,
распечатывая также информацию о задолженностях студента по оплате
обучения.
Продемонстрируем работу виртуального метода на примере:
Student ivan("Иванов Иван Иванович", 1, 1, 1990, 111);
ContractStudent petr("Петров петр Петрович",
2, 2, 1990, 222, 50000.0);
Student* pStud;
pStud = &ivan; // указателю на базовый класс присваивается
// адрес объекта класса Student
pStud -> Print(); // вызов метода Print() класса Student
pStud = &petr; // указателю на базовый класс
// присваивается адрес объекта
//класса ContractStudent
pStud -> Print(); // вызов метода Print()
// класса ContractStudent
В данном случае две одинаковые строки кода будут приводить к
вызову двух разных методов базового и производного классов
соответственно.
Конструкторы классов не могут являться виртуальными функциями,
поскольку производным классом не наследуется конструктор базового
класса.
Деструктор класса должен быть виртуальным, если при
уничтожении объекта производного класса происходит освобождение
ресурсов, которые использовались в нем. Виртуальность деструктора
проявляется в случае создания объекта с помощью операции выделения
108
Страницы
- « первая
- ‹ предыдущая
- …
- 106
- 107
- 108
- 109
- 110
- …
- следующая ›
- последняя »
