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要不然派生类无法访问基类的成员。