Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
sledge
0 / 0 / 0
Регистрация: 27.07.2009
Сообщений: 13
#1

Вопросец о виртуальном конструкторе копировщике. - C++

05.08.2009, 21:43. Просмотров 709. Ответов 4
Метки нет (Все метки)

Здравствуйте, все.
Вопрос плана такого:
Читаю, значит, книжку. Дочитал до виртуальных методов. И дошел до главы с названием" Виртуальный конструктор-копировщик".
Цитата :
... Иногда требуется, чтобы программа могла передать указатель на объект базового класса и правильно скопировать его в объект производного класса.Чтобы этого добиться, необходимо создать виртуальный метод Clone()...

Теперь, значит вопрос или вопросы.
1. Передать - куда?
2. Передать указатель.... и скопировать его в объект... Может тут трудности перевода или у меня знаний не хватает - но не могу Въехать - скопировать указатель в объект, пожалуйста, пролейте свет, если можно - примером :-)

Заранее благодарен всем (читающим || отвечающим).
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.08.2009, 21:43     Вопросец о виртуальном конструкторе копировщике.
Посмотрите здесь:

C++ Как перегрузить оператор в виртуальном классе
C++ Длина строки - вопросец.
C++ Ошибка в конструкторе
Исключения в конструкторе C++
О виртуальном наследовании C++
C++ Двоеточие в конструкторе
Шаблон в конструкторе C++
C++ О конструкторе копирования
Почему при виртуальном наследовании компилятор не знает о иерархии? C++
C++ Инициализация *char в конструкторе
Explicit в конструкторе C++
C++ Исключения в конструкторе

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Sekt
156 / 155 / 10
Регистрация: 29.04.2009
Сообщений: 637
05.08.2009, 21:46     Вопросец о виртуальном конструкторе копировщике. #2
Копирующий конструктор выглядит так:
C++
1
2
3
4
5
6
7
class cl
{
cl(const cl &);
};
cl::cl(const cl&obj)
{
}
1. Передать - куда?
Передать при наследовании например.
Alexandoros
227 / 65 / 4
Регистрация: 02.06.2009
Сообщений: 280
06.08.2009, 17:53     Вопросец о виртуальном конструкторе копировщике. #3
Цитата Сообщение от Sekt Посмотреть сообщение
Копирующий конструктор выглядит так:
Это не то.


Клонирование нужно, чтоб получить в другом указателе копию обджекта.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
class A
{
public:
   virtual A* Clone() = 0;
};
 
class B: public A
{
public:
   virtual B* Clone()
   {
       return new B(*this);
   }
};
 
class C: public A
{
public:
   virtual C* Clone()
   {
       return new C(*this);
   }
};
 
 
A *p1 = new B;
A *p2;
 
p2 = p1->Clone();
Поскольку ты на этапе исполнения не можеш предугадать что в p1 (C или B) ты не можеш написать
p2 = new B(*p1) или p2 = new C(*p1)
А с Clone все гут.
sledge
0 / 0 / 0
Регистрация: 27.07.2009
Сообщений: 13
08.08.2009, 21:58  [ТС]     Вопросец о виртуальном конструкторе копировщике. #4
Дошло, похоже.
Прелесть виртуальной функции.
Копировщик(о котором упоминал Sekt), как любой конструктор, не может быть виртуальным. Поэтому исп. виртуальная функция, которая использует копировщик:

C++
1
return new C(*this);
!!!!НО!!!!!! Код Alexandoros 'а тоже не совсем верен, как мне думается.
Виртуальные шункции должны иметь одинаковую сигнатуру, т.е.
надо написать так:
C++
1
2
virtual B* Clone()   заменить на  virtual A* Clone()
virtual C* Clone()   заменить на  virtual A* Clone()
)

Или я ошибаюсь?
Спасибо всем.
zim22
depict1
276 / 141 / 2
Регистрация: 11.07.2009
Сообщений: 606
08.08.2009, 22:50     Вопросец о виртуальном конструкторе копировщике. #5
Цитата Сообщение от sledge Посмотреть сообщение
Виртуальные шункции должны иметь одинаковую сигнатуру. Или я ошибаюсь?
Как правило, возвращаемый тип переопределяющей функции должен быть таким же, как и у функции, которую она переопределяет.
Однако для так называемых ковариантных возвращаемых типов это правило не настолько строгое.
подробности тут
Yandex
Объявления
08.08.2009, 22:50     Вопросец о виртуальном конструкторе копировщике.
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru