Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 27.07.2009
Сообщений: 13

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

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

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

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

Заранее благодарен всем (читающим || отвечающим).
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
05.08.2009, 21:43
Ответы с готовыми решениями:

Вопросец
Господа. Вот вопрос. Наблюдаю в вебмастере в графе входяшие ссылки больше половины сайтов/страниц, на которых нет на меня ссылок и быть не...

Вопросец по тайтлу
Как яндекс отнесется к тайтл, если там будет прописано "Ключевик, Ключевик, Ключевик... - Тыры-пыры-рас-топыры" Ну, и этот самый...

Длина строки - вопросец.
int le(char array) { int i; for(i=0;array != NULL;i++); return i; }

4
 Аватар для Sekt
159 / 156 / 47
Регистрация: 29.04.2009
Сообщений: 636
05.08.2009, 21:46
Копирующий конструктор выглядит так:
C++
1
2
3
4
5
6
7
class cl
{
cl(const cl &);
};
cl::cl(const cl&obj)
{
}
1. Передать - куда?
Передать при наследовании например.
0
229 / 67 / 11
Регистрация: 02.06.2009
Сообщений: 280
06.08.2009, 17:53
Цитата Сообщение от 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 все гут.
1
0 / 0 / 0
Регистрация: 27.07.2009
Сообщений: 13
08.08.2009, 21:58  [ТС]
Дошло, похоже.
Прелесть виртуальной функции.
Копировщик(о котором упоминал Sekt), как любой конструктор, не может быть виртуальным. Поэтому исп. виртуальная функция, которая использует копировщик:

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

Или я ошибаюсь?
Спасибо всем.
0
depict1
 Аватар для zim22
281 / 146 / 4
Регистрация: 11.07.2009
Сообщений: 606
08.08.2009, 22:50
Цитата Сообщение от sledge Посмотреть сообщение
Виртуальные шункции должны иметь одинаковую сигнатуру. Или я ошибаюсь?
Как правило, возвращаемый тип переопределяющей функции должен быть таким же, как и у функции, которую она переопределяет.
Однако для так называемых ковариантных возвращаемых типов это правило не настолько строгое.
подробности тут
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
08.08.2009, 22:50
Помогаю со студенческими работами здесь

Pinboard2, I2C, правильность соединений (вопросец)
Прикладываю картинку. Для удобства объяснений, все необходимые пины пометил красными цифрами, белыми буквами дописал то, что не в фокусе. ...

О виртуальном наследовании
Хотелось бы с Вашей помощью разобраться в деталях виртуального наследования. Вопрос такой: что на физическом уровне означает выражение ...

ИИ в виртуальном упрощённом мире
Привет всем. В последние дни много обдумывал ИИ. Пришёл к следующим мыслям: 1) Искусственный интеллект без возможности познания...

кракозябы в виртуальном приводе
подскажите в чем проблема? винда 10 была на русском языке, сейчас стоит итальянский. проблема в том когда создаю образ через daemon...

Редирект на виртуальном хосте
Здравствуйте. Начал изучать веб-технологии и столкнулся с такой проблемой, нужно сделать перенаправление на виртуальном хосте(XAMMP),...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это дополнительная запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru