2016-02-02 2 views
0
#include<iostream> 
using namespace std; 
class A 
{ 
protected: 
    int a,b; 
public: 
    A(int i, int j) 
    { 
     a=i; 
     b=j; 
     cout<< "A initialized"<<endl; 
    } 
    ~A() 
    { 
     cout<< "\nDestructor in base class A"<<endl; 
    } 
}; 
class B 
{ 
protected: 
    int c,d; 
public: 
    B(int i, int j) 
    { 
     c=i; 
     d=j; 
     cout<< "\nB initialized"<<endl; 
    } 
    ~B() 
    { 
     cout<< "\nDestructor in base class B"<<endl; 
    } 
}; 
class C : public B, public A 
{ 
    int e,f; 
public: 
    C(int m, int n, int o, int p, int q, int r): A(m,n), B(o,p) 
    { 
     e=q; 
     f=r; 
     cout<< "C initialized"; 
    } 
    ~C() 
    { 
     cout<< "\nDestructor in derived class C"<<endl; 
    } 
void display(void) 
    { 
    cout<< "\nThe value of a is : "<<a; 
    cout<< "\nThe value of b is : "<<b; 
    cout<< "\nThe value of c is : "<<c; 
    cout<< "\nThe value of d is : "<<d; 
    cout<< "\nThe value of e is : "<<e; 
    cout<< "\nThe value of f is : "<<f; 
    } 
}; 
int main() 
{ 
    C objc(10,20,30,40,50,60); 
    objc.display(); 
    return 0; 
} 

Я знаю, что деструкторы вызываются в обратном порядке вызова конструктора. Я хотел бы знать реализацию деструктора в коде выше, шаг за шагом, чтобы я мог понять, как это действительно работает. Укажите причину Почему и как деструкторы вызывается в обратном порядке конструктора.Как деструктор работает в производном классе. C++

+2

Обратите внимание, что 'A (m, n), B (o, p)' вызывает предупреждение. Порядок построения 'A' и' B' задается этим - 'public B, public A'. – LogicStuff

+3

Что вы ожидаете от вывода, и что вас смущает? Пожалуйста, [улучшите свой вопрос] (http://stackoverflow.com/posts/35160841/edit). –

+0

Это не какой вопрос, но почему и как. Неверный дубликат, если таковой имеется. –

ответ

1

Почему? Потому что всегда безопаснее и логично деконструировать назад от конструкции. Чтобы построить дом, вы сначала строите землю, затем стены и крышу. Если вы хотите уничтожить его, вы сделаете это назад: крыша, стены и земля.

Как? Это делается компилятором, он знает, как строить, тогда он знает, как уничтожить. Компилятор знает тип переменной, поэтому его цепочка построения (выведенная из графика наследования и структуры структуры), затем она отменяет цепочку, когда ей нужно ее уничтожить.

Смежные вопросы