考虑下面的代码:
#include<iostream>
using namespace std;
class A
{
public:
A() {cout << "1";}
A(const A &obj) {cout << "2";}
};
class B: virtual A
{
public:
B() {cout << "3";}
B(const B & obj) {cout<< "4";}
};
class C: virtual A
{
public:
C() {cout << "5";}
C(const C & obj) {cout << "6";}
};
class D:B,C
{
public:
D() {cout << "7";}
D(const D & obj) {cout << "8";}
};
int main()
{
D d1;
cout << "\n";
D d(d1);
}
程序的输出如下:
1357
1358
因此,对于 line类D d(d1)
的复制构造函数D
被调用。在继承过程中,我们需要显式调用基类的复制构造函数,否则只会调用基类的默认构造函数。到这里我才明白。
我的问题:
现在我想在D d(d1)
执行期间调用所有基类的复制构造函数。为此,如果我在下面尝试
D(const D & obj) : A(obj), B(obj), C(obj) {cout << "8";}
然后我得到这个错误:错误:'class A A::A' is inaccessible within this context
如何解决问题。我想要 的复制构造函数A
,B
以及C
何时D
调用的复制构造函数。这可能是很小的变化,但我没有得到。