我知道如果你没有自己实现,编译器有时会提供一个默认的复制构造函数.我很困惑这个构造函数到底是做什么的.如果我有一个包含其他对象的类,其中没有一个具有声明的复制构造函数,那么行为是什么?例如,像这样的类:
class Foo {
Bar bar;
};
class Bar {
int i;
Baz baz;
};
class Baz {
int j;
};
Run Code Online (Sandbox Code Playgroud)
现在,如果我这样做:
Foo f1;
Foo f2(f1);
Run Code Online (Sandbox Code Playgroud)
默认的复制构造函数会做什么?将编译器生成的复制构造函数Foo
调用编译器生成的构造函数Bar
进行复制bar
,然后调用编译器生成的复制构造函数Baz
吗?
我有以下代码:
class A
{
private:
int x;
public:
A()
{
x = 90;
}
A(A a1, A a2)
{
a1.x = 10;
a2.x = 20;
}
int getX()
{
return this->x;
}
};
Run Code Online (Sandbox Code Playgroud)
我知道代码可能很奇怪,但我不明白为什么a1
并且a2
可以访问私有数据成员x
?