【发布时间】:2014-10-24 06:04:57
【问题描述】:
在下面的代码中,我在派生类中定义了一个显式的复制构造函数。我还在基类中编写了自己的复制构造函数。
Primer 说派生复制构造函数必须显式调用基类,并且继承的成员应该只由基类复制构造函数复制,但我在派生类复制构造函数中复制了继承的成员,它工作正常。这怎么可能?
另外,如何在派生类复制构造函数中显式调用基类复制构造函数? Primer 说的是 base(object),但我很困惑语法如何区分普通构造函数调用和复制构造函数调用。
提前致谢。
#include<stdafx.h>
#include<iostream>
using namespace std;
class A
{
public:
int a;
A()
{
a = 7;
}
A(int m): a(m)
{
}
};
class B : public A
{
public:
int b;
B()
{
b = 9;
}
B(int m, int n): A(m), b(n)
{
}
B(B& x)
{
a = x.a;
b = x.b;
}
void show()
{
cout << a << "\t" << b << endl;
}
};
int main()
{
B x;
x = B(50, 100);
B y(x);
y.show();
return 0;
}
【问题讨论】:
-
请使用标点符号,不要使用制表符来缩进代码。
-
您没有在
A中定义复制构造函数(有一个隐式生成的)。您不必从B显式调用A的复制构造函数。您的代码调用A的复制构造函数,然后您覆盖这些值,这很好。
标签: c++ inheritance