创建一个基础 class 对象使用派生的 class 构造函数 c++

create a base class object use a derived class constructor c++

有人能说出为什么 A a = B(); 先调用构造函数然后立即调用析构函数吗? 为什么输出是这样的?

C A

C B

D B

D A

test1 A

D A
class A  {
public:
    A() {
        cout<< "C A" <<endl;
    }

    ~A() {
        cout<< "D A" <<endl;
    }

    void test1() {
        cout<< "test1 A" << endl;
    }
};

class B:public A {
public:
    B() {
        cout<< "C B" <<endl;
    }

    ~B() {
        cout<< "D B" <<endl;
    }

    void test1() {
        cout<< "test1 B" << endl;
    }
};

int main(int argc, const char * argv[]) {

    A a = B();   
    a.test1();
    return 0;
}

在此声明中

 A a = B(); 

首先创建了一个B类型的临时对象,所以调用了它的基础构造函数A和B的构造函数。

C A

C B

对象 a 是使用 class A.

的默认复制构造函数创建的

声明后,类型 B 的临时对象被销毁,以相反的顺序调用析构函数

D B

D A

在程序结束时,对象 a 也被调用其析构函数销毁。

test1 A

D A