非自动继承的函数

周晓荣 2011-12-24 11:20:49
C++编程思想:13.4.3 非自动继承的函数,里面说 赋值=操作符 不能被继承

求解释~


#include <iostream>
using namespace std;

class root
{
public:
root(int i = 0)
{
cout<<"constructor"<<endl;
}

root(root ©_object)
{
cout<<"copy function"<<endl;
}

root &operator=(const root &rhs)
{
cout<<"root operator=()"<<endl;
return *this;
}

~root()
{
cout<<"destructor"<<endl;
}

};

class child : public root
{

};

int main(void)
{

child child_a;
child child_b = child_a;
child_a = child_b;//调用了root::operator=

return 0;
}
...全文
122 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
周晓荣 2011-12-25
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 qscool1987 的回复:]

这个问题我的理解是这样的,因为派生类总是包含基类的部分,创建派生类的对象,或者派生类之间进行赋值总会先去完成自己基类的部分,而这个过程都是需要用到基类的构造函数或者赋值函数,而这个并不能说明派生类是否继承了这些函数,只是派生类为了完善自身而必须要做的事情。编译器的行为似乎是,当创建一个派生类的对象时,他似乎就创建了两个对象一个是基类对象,一个是派生类除去基类部分后的对象,对象模型
C/C++ ……
[/Quote]
就是说,当派生类A、B需要赋值操作时,首先调用到了基类的赋值操作,基类A对基类B进行赋值而已(所以例子会输出root::operator),接着派生类则调用其自身的赋值操作(如果有定义的话)
qscool1987 2011-12-25
  • 打赏
  • 举报
回复
这个问题我的理解是这样的,因为派生类总是包含基类的部分,创建派生类的对象,或者派生类之间进行赋值总会先去完成自己基类的部分,而这个过程都是需要用到基类的构造函数或者赋值函数,而这个并不能说明派生类是否继承了这些函数,只是派生类为了完善自身而必须要做的事情。编译器的行为似乎是,当创建一个派生类的对象时,他似乎就创建了两个对象一个是基类对象,一个是派生类除去基类部分后的对象,对象模型

|-------------| <<-------derived
|base |
|-------------|
|derived-base |
| |
|-------------|
声明一个派生类对象
derived md;
等价于
base mb;
derived-base mdb;
次序永远是派生类在前面
所以这个时候就自然要调用base类的构造函数构造mb
然后在derived的构造函数里面舒适化derived-base的部分
blh 2011-12-24
  • 打赏
  • 举报
回复
当类对象赋值给同类型类对象时,首先检查该类自己是否重载=,如果有,则使用自己的=,否则使用基类的=函数(如果存在的话),如果是多重继承,则会使用所有基类的=,如果都没有则使用默认的=

qq120848369 2011-12-24
  • 打赏
  • 举报
回复
可以调用基类的operator =
taodm 2011-12-24
  • 打赏
  • 举报
回复
楼主对函数被继承的这一概念的理解是什么?
这将非常影响到最终答案是什么。
iamnobody 2011-12-24
  • 打赏
  • 举报
回复
不能被继承的意思是不属于派生类.
这个op=是不属于派生类的.之所以你看到他被调用是因为派生类的默认operator=对自己的每个成员和基类部分调用operator=();所以调用了你写的root::operator=();

64,637

社区成员

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

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