Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Собака, 2-- кошка, иначе-- млекопитающее, 0-- выход. 0



Так как часто используется указатель на объект базового класса, хотелось бы иметь возможность удалять этот объект, к какому бы классу он не принадлежал, на самом деле, следовательно необходимо использовать виртуальные деструкторы в том случае если в классе объявлены виртуальные функции.

Конструктор не может быть виртуальным и не может быть виртуального конструктра-копировщика. Если требуется передать указатель на объект произвольного класса и правильно скопировать его можно использовать виртуальный метод 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 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2025 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.151 с)...