![]() |
Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | |
|
Так как часто используется указатель на объект базового класса, хотелось бы иметь возможность удалять этот объект, к какому бы классу он не принадлежал, на самом деле, следовательно необходимо использовать виртуальные деструкторы в том случае если в классе объявлены виртуальные функции.
Конструктор не может быть виртуальным и не может быть виртуального конструктра-копировщика. Если требуется передать указатель на объект произвольного класса и правильно скопировать его можно использовать виртуальный метод Clone()— создающий и возвращающий копию объекта текущего класса.
Virtual Mammal* Mammal::Clone(){return new Mammal(*this);}
Virtual Mammal* Dog::Clone(){return new Dog(*this);}
Virtual Mammal* Cat::Clone(){return new Cat(*this);}
Существует цена виртуальных методов так как необходимо поддерживать v-таблицу,(снижение быстродействия и затраты на память), а так же необходимость писать виртуальный деструктор. Поэтому необходимо обосновывать необходимость использования виртуальных методов (если да, то какие именно).
Рекомендуется:
§ Используйте виртуальные методы только в том случае, если программа содержит базовый и производный классы.
§ Используйте виртуальный деструктор, если в программе был созданы виртуальные методы.
§ Не пытайтесь создать виртуальный конструктор.
При работе с виртуальными функция необходимо использовать одно и тоже имя, а так же списки аргументов и тип возвращаемого параметра, если это не выполняется, то механизм виртуальных функций игнорируется.
Дата публикования: 2014-11-28; Прочитано: 182 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!