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

C++子类赋值有关问题

2013-01-08 
C++子类赋值问题本帖最后由 Big_Wang5 于 2012-12-23 15:46:42 编辑C++中有纯虚函数的类是不能实例化的,但

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

热点排行