在下面的代码中,我在派生类中定义了一个显式的复制构造函数。我还在基类中编写了自己的复制构造函数。
Primer说派生的拷贝构造函数必须显式地调用基类,并且继承的成员只能由基类拷贝构造函数复制,但是我在派生类拷贝构造函数中复制了继承的成员,并且它工作正常。这怎么可能?
另外,如何在派生类复制构造函数中显式调用基类复制构造函数? Primer说基础(对象),但我很困惑语法如何区分正常构造函数调用和复制构造函数调用。
提前致谢。
#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;
}
答案 0 :(得分:1)
复制构造函数是指将另一个Object传递给构造函数时:
class A() {
private:
int a;
public:
//this is an empty constructor (or default constructor)
A() : a(0) {};
//this is a constructor with parameters
A(const int& anotherInt) : a(anotherInt) {};
//this is a copy constructor
A(const A& anotherObj) : a(anotherObj.a) {};
}
用于派生类
class B : public A {
private:
int b;
public:
//this is the default constructor
B() : A(), b() {};
//equivalent to this one
B() {};
//this is a constructor with parameters
// note that A is initialized through the class A.
B(const int& pa, const int& pb) : A(pa), b(pb) {}
//for the copy constructor
B(const B& ob) : A(ob), b(ob.b) {}
}
答案 1 :(得分:0)
其他人如何写在这里:
How to call base class copy constructor from a derived class copy constructor?
我会像这样编写复制构造函数,而不是像macmac编写的那样:
B(const B& x) : A(x) , b(x.b)
{
}
要调用基类A的复制构造函数,只需调用它传递派生的B对象A(B),就不需要指定B.a。
编辑:macmac以正确的方式编辑了他的答案,现在他的回答比我的好。