|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
26.06.2012, 23:56 | #1 |
Пользователь
Регистрация: 29.08.2011
Сообщений: 14
|
Копирующий конструктор и абстрактный указатель член класса
Здравствуйте.
Считается что поумолчанию копирующий конструктор выполняет почленную инициализацию и для корректного копирования обьекта имеющего в своём составе указатели пишется собственная реализация коп. конструктора. Короткий пример: Код:
Но как быть если класс содержит указатель на абстрактный класс: Код:
|
27.06.2012, 00:04 | #2 |
C++ hater
СтарожилДжуниор
Регистрация: 19.07.2009
Сообщений: 3,333
|
2Начавший
я бы в дереве классов, которому принадлежит класс Abs использовал идиому prototype. погугли, инфы много. с ней твой код будет выглядеть так: Код:
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay
My other car is cdr. Q: Whats the object-oriented way to become wealthy? A: Inheritance Последний раз редактировалось pproger; 27.06.2012 в 00:11. |
27.06.2012, 00:19 | #3 |
Пользователь
Регистрация: 29.08.2011
Сообщений: 14
|
pproger но если в классе Abs нет "клонирующего" метода, то наверное никак?
Давно где-то читал что new "помнит" сколько было выделено памяти чтобы правильно сработал delete, точно не помню. Вот думаю нельзя ли это как-то использовать. Нет, глупость какая то. |
27.06.2012, 00:25 | #4 | |
C++ hater
СтарожилДжуниор
Регистрация: 19.07.2009
Сообщений: 3,333
|
2Начавший
Цитата:
можно и без clone, используя dynamic_cast (rtti должен быть включен). но это так же не оптимально, затраты на использование rtti + при добавлении нового класса в этом дереве, тебе придется переписать все копирующие конструкторы, добавив в них проверку на новый класс. без rtti - можно завести enum с идентификаторами классов (каждому классу присвоить целочисленное значение), что так же не избавит от переписывания копирующих конструкторов после добавления нового класса (хотя у того же александреску были всякие извраты для ведения реестра классов, чтобы не переписывать постоянно старый код, но это все же извращение). прототип - самое правильное решение. причем в проект его ввести не составит труда. в абстрактном классе объявляешь чисто виртуальную функцию clone, в дочерних - переопределяешь, используя ковариантность. внутри clone обычно реализуется просто вызовом конструктора копирования. единственный минус - clone всегда нужно переопределять во вновь созданном классе.
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay
My other car is cdr. Q: Whats the object-oriented way to become wealthy? A: Inheritance Последний раз редактировалось pproger; 27.06.2012 в 00:34. |
|
27.06.2012, 00:39 | #5 |
Пользователь
Регистрация: 29.08.2011
Сообщений: 14
|
Получается если использовать стороние библиотеки, в которых идиома прототипов не использовалась, то можно забыть о копирующем конструкторе
|
27.06.2012, 00:44 | #6 | |
C++ hater
СтарожилДжуниор
Регистрация: 19.07.2009
Сообщений: 3,333
|
2Начавший
Цитата:
пс. что за либа то?
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay
My other car is cdr. Q: Whats the object-oriented way to become wealthy? A: Inheritance Последний раз редактировалось pproger; 27.06.2012 в 00:47. |
|
27.06.2012, 00:49 | #7 |
Пользователь
Регистрация: 29.08.2011
Сообщений: 14
|
Не имел в виду конкретную либу. Вопрос чисто теоретический. Спасибо за помощь.
|
27.06.2012, 00:50 | #8 |
C++ hater
СтарожилДжуниор
Регистрация: 19.07.2009
Сообщений: 3,333
|
2Начавший
пффф, теоретический. теоретически либу правильно проектировать надо
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay
My other car is cdr. Q: Whats the object-oriented way to become wealthy? A: Inheritance |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Указатель на функцию и функция-член | Granus | Общие вопросы C/C++ | 3 | 25.08.2011 13:20 |
Зачем нужен копирующий конструктор? | Rekky | Общие вопросы C/C++ | 3 | 25.08.2011 13:03 |
Указатель на абстрактный класс | zhenya.ya | Общие вопросы C/C++ | 0 | 11.11.2010 23:51 |
С++ (конструктор, деструктор, копирующий конструктор) | Jane-sad | Помощь студентам | 2 | 01.10.2010 10:01 |