首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

有关拷贝构造函数的疑问解决方法

2012-05-01 
有关拷贝构造函数的疑问在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){}//这里就通过函数参数初始化调用了父类的拷贝构造函数了,貌似拷贝构造函数在父类的私有成员里面,子类不能显示调用的
};

热点排行