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

C++

Войти
Регистрация
Восстановить пароль
 
densvr
Сообщений: n/a
#1

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

20.01.2013, 19:04. Просмотров 496. Ответов 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     странности при вызове конструкторов копирования с++
Посмотрите здесь:

Вызов конструкторов/деструкторов при наследовании - C++
Объясните пожалуйста, как получается вывод на экран 2531 #include <iostream> class A { public: A(int n = 2) : m_i(n) {...

Странности при вводе из файла - C++
Программа должна получать данные из файла.... Примечательно, что она их получает корректно только при определенном положении слов в...

Использование конструкторов и деструктора при проектировании пользовательского класса - Visual C++
1. Создать класс с именем PRICE, содержащий следующие поля: ■ название товара; ■ название магазина, в котором продается товар; ...

Использование конструкторов и деструктора при проектировании пользовательского класса - C++
Дан одномерный массив A. Найти max (a2, a4, …, a2k) + min (a1, a3, …, a2k+1).

Странности уровня доступа при наследовании - C++
Всем привет! :) Сегодня ночью меня озадачило странное поведение при наследовании классов. А именно — уровень доступа к унаследованным...

win32api странности при выводе на экран - C++
Доброго времени суток. Возникла проблема: при использовании в цикле TextOut на экран выводится только одна первая цифра, считанная из...

Порядок вызова конструкторов при присваивании объектов одного класса - C++
Имеется код ниже. Wein dres = rom; Где dres и rom объекты класса Wein. Класс Wein имеет все конструкторы по умолчанию....

Ошибка при вызове метода - C++
Не пойму в чем ошибка... #include <vector> #include <iostream> template <typename T> class Beast { public: int x; ...

Ошибка при рекурсивном вызове - C++
На третьем вызове функции вылазит ошибка об отсутсвии инциализации переменой j, дебаг говорит, что после второго захода в функци j внезапно...

Ошибка при вызове деструктора - C++
По окончании программы выдает ошибку #include <string.h> #include <iostream> using namespace std; class nik //объявление...


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

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

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