【发布时间】:2020-05-14 21:54:27
【问题描述】:
我正在学习 c++,但发现了一个我不太了解的输出。
#include <iostream>
using namespace std;
class A{
public:
A(){ cout << "A+" << endl;}
A(const A&){ cout << "A(A)" << endl;}
~A(){cout << "A-" << endl;}
};
class B{
public:
B(){ cout << "B+" << endl;}
B(const B&){cout << "B(B)" << endl;}
~B(){cout << "B-" << endl;}
private:
A a;
};
class C : public A{
public:
C(const B& b) : b1(b) { cout << "C+" << endl;}
~C(){ cout << "C-" << endl;}
private:
B b1,b2;
};
void test(A a){
A m(a);
}
int main(){
B b;
C c(b);
test(c);
return 0;
}
输出是
A+
B+
A+
A+
B(B)
A+
B+
C+
A(A)
A(A)
A-
A-
C-
B-
A-
B-
A-
A-
B-
A-
我的意思是第一个,B 去默认看到一个我们从类型 A 中得到一个成员然后去 A 那就是
A+ 然后返回 B 并打印 B+。这就是B b;而不是C c(b)它去C,看到它的公共A去A并打印A+,然后返回看到我们有一个成员B b1,b2去B并且B有一个成员A并且去agean A 并打印 A+ 而我不明白为什么 B(B) ?在此 B(B) 之后我什么都不懂.. 我尝试调试它但它对我没有多大帮助,也许有人可以解释为什么会这样?
【问题讨论】:
-
如果你将输出与行匹配(如 cout
-
在
C构造函数初始化列表中,b1(b)是b1成员的copy-initialization。因此它调用B复制构造函数。 -
@Someprogrammerdude 但为什么它不在下一行打印
C+?让我感到困惑的是``` C(const B& b)```它说copyconstructor等待一个B对象?和b1(b)调用copyconst。来自 B?好混乱 -
可能有点不相关,但是您可以通过简单地使用打印函数全名的非标准宏(即使它是模板)来使输出更容易理解。用
cout<<__PRETTY_FUNTION__<<endl;替换所有cout<<...并享受。
标签: c++ class constructor derived-class