创建一个基础 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
有人能说出为什么 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