С++ - язык, который изучается постепенно.Нет — конструкторам копий и оператору
                   Справочники Всё для создания сайта

Ссылки


Home
Бизнес
Справочники
Советы







Материалы книги получены с http://www.itlibitum.ru/

Нет - конструкторам копий и оператору =!

Предполагается, что Grandpa - чисто гомоморфный базовый класс, содержащий хотя бы одну чисто виртуальную функцию. Это предотвращает непосредственное создание экземпляров Grandpa клиентом. Если вы используете производящую функцию для класса с возможностью создания экземпляров, конструкторы следует сделать защищенными, чтобы экземпляры могли создаваться только производящей функцией.

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

Если кто-нибудь захочет продублировать экземпляр, создайте специальную версию make-функции для копирования this.

class Grandpa {

public:

virtual Grandpa* makeClone() = 0;

};

Эта функция не объявляется статической, поскольку в каждом производном классе она должна решать специализированную задачу. С присвоением дело обстоит сложнее. Если переопределить оператор = для левого операнда, непонятно, что же тогда делать с правым операндом, тип которого неизвестен.

Первое практическое решение - полностью запретить присваивание в таких ситуациях и сделать оператор = закрытым. Второе - использовать вариацию на тему двойной передачи: сделать оператор = виртуальным и в каждом производном классе вызывать виртуальную функцию AssignTo(), перегружаемую для каждого производного класса. Смотрится уродливо, но работает.


Назад    Содержание    Далее    

Home  Создание сайтов  Учебник по записи CD  Справочник Web дизайнера Самоучитель IE PHP и MySQL Компьютерные сети С++ E-mail me

Copyright 2007. Климов Александр. All Right Reserved.
Hosted by uCoz