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

странности при вызове конструкторов копирования с++ - C++

Восстановить пароль Регистрация
 
densvr
Сообщений: n/a
20.01.2013, 19:04     странности при вызове конструкторов копирования с++ #1
Здравствуйте! Хочу задать вопрос по c++ (visual с++ 2010 express).

Имеется вот такой код:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Parent {
public:
Parent() {}
Parent(const Parent& Parent) {}
};
 
class Child: public Parent {
public:
Child() {}
Child(const Child& Child) {}
};
 
void main() {
Child c;
Child c2(c);
}
Мне казалось, что концепция языка такова: при вызове конструктора класса, предок которого имеет такой же конструктор, вначале вызывается этот конструктор предка, а уже затем выполняется код в конструкторе нашего класса.

Но в данном примере при создании класса c2 конструктором Child::Child(const Child&) вызывается не Parent::Parent(const Parent&) а Parent::Parent(void).
(отследил с помощью точек останова и пошагового выполнения)

Вопросы:
1) Почему так получается
2) Как этого избежать - как из конструктора копирования потомка вызывать не конструктор предка по умолчанию, а его конструктор копирования?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.01.2013, 19:04     странности при вызове конструкторов копирования с++
Посмотрите здесь:

Использование конструкторов и деструктора при проектировании пользовательского класса Visual C++
Странности при вводе из файла C++
win32api странности при выводе на экран C++
C++ Ошибка при вызове функции
Порядок вызова конструкторов при множественном наследовании C++
C++ Ошибка при вызове деструктора
C++ Вызов конструкторов/деструкторов при наследовании
C++ Использование конструкторов и деструктора при проектировании пользовательского класса
C++ Странности уровня доступа при наследовании
C++ Ошибка при вызове функции
Порядок вызова конструкторов при присваивании объектов одного класса C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Nick Alte
Эксперт С++
1594 / 986 / 117
Регистрация: 27.09.2009
Сообщений: 1,901
Завершенные тесты: 1
20.01.2013, 19:13     странности при вызове конструкторов копирования с++ #2
C++
1
Child(const Child& c): Parent(c) {}
Добавлено через 5 минут
Цитата Сообщение от densvr Посмотреть сообщение
Почему так получается
Потому что именно это явно прописано в конструкторе - не передавать Parent ничего, т.е. конструировать по умолчанию. Если этот конструктор не описывать, отдав на откуп компилятору, он построит его правильно, скопировав и Parent. Если не отдавать - так и надо указать, какой конструктор предка вызывать.
Yandex
Объявления
20.01.2013, 19:13     странности при вызове конструкторов копирования с++
Ответ Создать тему
Опции темы

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