读书人

C++子类赋值有关问题

发布时间: 2013-01-08 14:02:14 作者: rapoo

C++子类赋值问题
本帖最后由 Big_Wang5 于 2012-12-23 15:46:42 编辑 C++中有纯虚函数的类是不能实例化的,但是如果子类要实现赋值操作符,需要调用基类的复制构造函数,这样 会出错啊!!!!


class BaseClass
{
public:
BaseClass(int m):men1(m){}
BaseClass(BaseClass& item){ this->mem1 = item.mem1;}
BaseClass& operator=(BaseClass& item){ this->mem1=item.mem1; return *this; }
virtual void Fun()const=0;
virtual ~BaseClass(){}
private:
int mem1;
};

class DerivedClass
:public BaseClass
{
public:
DerivedClass(int m,int n):BaseClass(m),mem2(n){}
~DerivedClass();
void Fun()const{}
DerivedClass& operator=(DerivedClass &item){
if(&item != this){
BaseClass::BaseClass(item);//此处不合法!!!!!!
}
this->mem2 = item.mem2;
return *this;
}
private:
int mem2;
};

[解决办法]
class BaseClass
{
public:
BaseClass(int m):mem1(m){}
BaseClass(BaseClass& item)
{
this->mem1 = item.mem1;
}
BaseClass& operator=(BaseClass& item)
{
this->mem1=item.mem1; return *this;
} virtual void Fun()const=0;
~BaseClass(){}
protected:
int mem1;
};
class DerivedClass :public BaseClass
{
public:
DerivedClass(int m,int n):BaseClass(m),mem2(n){}
~DerivedClass();
void Fun()const{}
DerivedClass& operator=(DerivedClass &item)
{
if(&item==this)
return *this;

this->mem1=item.mem1;
this->mem2=item.mem2;

return *this;
}
private:
int mem2;
};
程序中有语法错误,也有输入错误。
另外:基类的成员要protected要不然派生类无法访问基类的成员。

读书人网 >C++

热点推荐