С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

Порядок вызова конструкторов - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Как запустить dll скомпиленную в Visual Studio 2012 в Windows XP http://www.cyberforum.ru/cpp-beginners/thread809867.html
При подключении этой dll появляется ошибка Unable to load DLL error=0 -or-, error=127 Нужны какие то системные dll от Visual Studio, раньше когда я работал только на Visual Studio 2008 было точно...
C++ default компилятор под Windows 7 Хочу скомпилировать себе mono develop погонять, но сам проект с джитхаба не запускается говорит мол версия 2010 слишком стара, какие есть еще способы скомпилировать проект (подскажите как называется... http://www.cyberforum.ru/cpp-beginners/thread809864.html
запись в файл C++
Помогите пожалуйста мне нужно считать данные из одного файла и потом с некоторыми изменениями записать их в другой файл. Вот мой код но он не записывает нужную информацию и вывод разные буквы...
C++ Простейший список
Никак не получается понять, как создавать и выводить списки. В программе пытался создать простейший списсок. #include <stdio.h> #include <stdlib.h> struct list { long long numb; struct...
C++ ошибка в коде "Invalid argument " http://www.cyberforum.ru/cpp-beginners/thread809836.html
Привет все мне дали задание создать библиотеку для комплексных чисел вот начал делать и столкнулся с ошибкой main.ppp #include <cstdlib> #include <iostream> #include <"komplex.h"> using...
C++ Массив. Положительные элементы массива а, записанные в том же порядке + отрицательные элементы массива b, записанные в обратном порядке Из двух массивов а, а, ...., а и b, b, ....., b, создать следующие массивы: 1. Положительные элементы массива а, записанные в том же порядке + отрицательные элементы массива b, записанные в обратном... подробнее

Показать сообщение отдельно
xtorne21st
интересующийся
304 / 275 / 19
Регистрация: 25.09.2010
Сообщений: 1,056

Порядок вызова конструкторов - C++

16.03.2013, 05:43. Просмотров 5411. Ответов 6
Метки (Все метки)

на срр-reference нашёл тему про виртуальный деструктор, но я так и не понял (да там и не объясняется), почему именно конструктор класса Object вызывается вторым по счёту после вызова конструктора базового класса? Ведь он же по идее находится внутри класса Derived, следовательно сначала должен вызваться конструктор Derived и после инициализации объекта своим конструктором уже создать объект класса Object и вызвать его конструктор. Но всё происходит иначе:
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
30
31
32
33
34
#include <iostream>
 
using namespace std;
 
class Object  
{
  public:
    Object() { cout << "Object::ctor()" << endl; }
   ~Object() { cout << "Object::dtor()" << endl; }
};
 
class Base 
{
  public:
    Base() { cout << "Base::ctor()" << endl; }
    virtual ~Base() { cout << "Base::dtor()" << endl; } 
    virtual void print() = 0;
};
 
class Derived: public Base 
{
  public:
    Derived() { cout << "Derived::ctor()" << endl; }
   ~Derived() { cout << "Derived::dtor()" << endl; }    
    void print() {}   
    Object  obj;
};
 
int main ()
{
    Base * p = new Derived;
    delete p;
    return 0;
}
Bash
1
2
3
4
5
6
7
8
ilyuha21st@coldshoot:~/Projects$ ./prog
Base::ctor()
Object::ctor()
Derived::ctor()
Derived::dtor()
Object::dtor()
Base::dtor()
ilyuha21st@coldshoot:~/Projects$
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.