有关拷贝构造函数的疑问解决方法
有关拷贝构造函数的疑问
在C++中如果父类中使用拷贝构造函数,子类中能否使用拷贝构造函数,如果能,怎么使用?
希望给出详解。
------解决方案--------------------
可以的。没有什么限制的。
------解决方案--------------------
下面的代码供参考:
在C++中如果父类中使用拷贝构造函数,子类中能否使用拷贝构造函数,如果能,怎么使用?
希望给出详解。
------解决方案--------------------
可以的。没有什么限制的。
------解决方案--------------------
下面的代码供参考:
- C/C++ code
#include <iostream> using namespace std; class Base { private: char* name; public: Base(char* n) { int length = strlen(n) + 1; name = new char[length]; memset(name, 0, length); strcpy(this->name, n); cout << "Base::constructor" << endl; } Base(const Base& base) { int length = strlen(base.name) + 1; name = new char[length]; memset(name, 0, length); strcpy(this->name, base.name); cout << "Base::copy_constructor" << endl; } void print() { cout << name << endl; } virtual ~Base() { delete[] name; cout << "Base::destructor" << endl; } }; class Derived : public Base { private: char* nickname; public: Derived(char* n, char* nn) : Base(n) { int length = strlen(nn) + 1; nickname = new char[length]; memset(nickname, 0, length); strcpy(this->nickname, nn); cout << "Derived::constructor" << endl; } Derived(const Derived& derived) : Base(derived) // 显式调用基类的copy constructor { int length = strlen(derived.nickname) + 1; nickname = new char[length]; memset(nickname, 0, length); strcpy(this->nickname, derived.nickname); cout << "Derived::copy_constructor" << endl; } void dprint() { cout << "Name: "; print(); cout << "Nickname: " << nickname << endl; } ~Derived() { delete[] nickname; } }; int main(int argc, char** argv) { Base base("William"); base.print(); Base copy(base); copy.print(); Derived derived("William", "Bill"); derived.dprint(); Derived dcopy(derived); dcopy.dprint(); return 0; }
------解决方案--------------------
class a
{
int t;
a(const a l){t=l.t;}
};
class b:public a
{
a n;
b(const b l):n(a){}//这里就通过函数参数初始化调用了父类的拷贝构造函数了,貌似拷贝构造函数在父类的私有成员里面,子类不能显示调用的
};