请教赋值拷贝

Michael_Xie 2007-09-06 11:22:50
class Base
{
int* num;
...
};
class Derived : public Base
{
char* ch;
...
Derived& operator = ( const Derived& obj )
{
...//在这里我如何使得基类的num也拷贝了一份呢?
}
}
...全文
134 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
kuike 2007-09-07
  • 打赏
  • 举报
回复
中文注视没解析对
kuike 2007-09-07
  • 打赏
  • 举报
回复
1楼的这个拷贝有问题,完全等同于默认的赋值拷贝,即采用位拷贝方式。num默认是private,所以派生类Drived无法访问父类的该私有成员。
class Base
{
int* num;
...
public:
Base& operator=(const Base& b)
{
if(this == &b)
return *this;
if(num)
delete num;
num = new int;
*num = *Base.num;
return *this;
}
};

class Derived : public Base
{
char* ch;
...
Derived& operator = ( const Derived& obj )
{
if(this == &obj) return *this;

//ÔÚÕâÀïÎÒÈçºÎʹµÃ»ùÀàµÄnumÒ²¿½±´ÁËÒ»·ÝÄØ£¿
CBase::operator=(const_cast(obj));
if(ch)
delete []ch;

ch = new char[strlen(obj.ch)+1];
strcpy(ch, obj.ch);

return *this;
}
}
hilary0810 2007-09-07
  • 打赏
  • 举报
回复
Derived& operator = ( const Derived& obj )
{
if (this != &obj)
memcpy(this,&obj,sizeof(Derived));
return *this
}
Michael_Xie 2007-09-07
  • 打赏
  • 举报
回复
问题已经解决,即:
在Base中正确重载=,然后在Derived的操作符重载=中调用基类的=函数即可。
Base::operator = ( obj )。
谢谢大家的关注!
gooderfeng 2007-09-07
  • 打赏
  • 举报
回复
base提供接口,然后调用base接口设置。
现在的程序子类不能访问父类的私有变量。

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧