| Цитата | 1. Что такое Виртуальные функции? Для чего они нужны и где применяются?
|
| Код | class A { public: void f1() {std::cout << "A::f1()\n" ;}; virtual void f2() {std::cout << "A::f2()\n" ;}; }; class B : public A { public void f1() {std::cout << "B::f1()\n" ;}; virtual void f2() {std::cout << "B::f2()\n" ;}; };
....
A *a; // может быть указателем на А или его потомка a = new B(); a->f1(); // вызовется ф-я A::f1 a->f2(); // вызовется B::f2 потому, что это виртуальная, т.е. этот механизм позволяет вызывать // функции не того класса, который объявлен (А), а того, на который этот указатель // действительно указывает (В)
|
Добавлено @ 12:57
| Цитата | 2. Что такое Виртуальные деструкторы? Также для чего они нужны и где применяются? Можно напримере не виртуальных деструкторов.
|
это деструктор, объявленный с словом virtual. Необходимо это для того же, для чего и другие виртуальные функции, чтобы в нужный момент вызвался деструктор того объекта, который удаляется
| Код | A *a; // может быть указателем на А или его потомка a = new B();
delete a; // если деструктор А не объявлен виртуальным, то в этом месте вызовется именно он, но мы // ведь создавали объект B и должен вызваться деструктор B (для этого делаем деструкторы // виртуальными)
|
|