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

C++

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

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

20.01.2013, 19:04. Просмотров 499. Ответов 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++):

Глюк при вызове strcat. - C++
Здравствуйте. Програмка должна объединять две строки в одну и сохранять в файле. при запуске проги выскакивает отладчик, но я увы не...

При вызове функции из OpenSSL программа завершается с кодом 0х1 - C++
int main(int argc, char* argv) { RSA *keypair = RSA_generate_key(RSA_KEY_LENGTH, PUB_EXP, NULL, NULL); FILE *rsa_pubkey_file =...

Объясните вызов конструкторов - C++
Попробовал разобраться, как лучше реализовывать operator + и operator += в классе (который через который) - не могу понять вызов...

Ошибка при вызове CreateThread - C++ Builder
Всем привет! Есть функция: DWORD __stdcall TmainForm::OpenPic(LPVOID lpParameter) В кнопке пытаюсь запустить её в потоке: ...

Утечка памяти при вызове функции - C++ Builder
Здравствуйте. Объясните пожалуйста почему возникает утечка памяти при вызове функции get_msg_error. int get_msg_error( const...

Ошибка при вызове функции из dll - C++ Builder
Здравствуйте уважаемые программисты! Создал функцию, по обычному все отлично работает, а когда заношу ее в dll, выдает ошибку! Код dll:...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Nick Alte
Эксперт С++
1637 / 1009 / 119
Регистрация: 27.09.2009
Сообщений: 1,945
Завершенные тесты: 1
20.01.2013, 19:13 #2
C++
1
Child(const Child& c): Parent(c) {}
Добавлено через 5 минут
Цитата Сообщение от densvr Посмотреть сообщение
Почему так получается
Потому что именно это явно прописано в конструкторе - не передавать Parent ничего, т.е. конструировать по умолчанию. Если этот конструктор не описывать, отдав на откуп компилятору, он построит его правильно, скопировав и Parent. Если не отдавать - так и надо указать, какой конструктор предка вызывать.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.01.2013, 19:13
Привет! Вот еще темы с ответами:

Лишний параметр при вызове функции - C++ Builder
Помогите пожалуйста. Пишу чат. При написании клиентского приложения возникла вот такая ошибка: Chat_Client.cpp(101): E2227 Extra...

Не заполняется структура, при вызове функции из dll. - C++ Builder
Здравствуйте. Возникла такая ситуация. Хочу подцепить dllку в проект borland c++ builder 6, которая работает в проекте visual c++ 6. ...

Программа завершается аварийно при вызове функции - C++ Builder
Делаю консольное приложение на шестом Билдере. Не могу найти ошибку.Убил день. Прога компилиться без ошибок , но когда вызываю функцию:...

Странности при вызове конструкторов - Java
У меня почему-то в eclipse при вызове конструкторов некоторых типов не просто не создается соответствующий элемент, а перестает...


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

Или воспользуйтесь поиском по форуму:
Ответ Создать тему
Опции темы

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