C++中赋值运算符能不能被派生类继承
来源:互联网 发布:期刊在线阅读系统源码 编辑:程序博客网 时间:2024/06/07 20:05
如果基类中重写了赋值运算符重载函数,派生类中没有重写的话,那么当用派生类调用赋值运算符时,基类的运算符重载函数会被调用,而且派生类的成员也会进行赋值。
如果基类中重写了赋值运算符重载函数,派生类中也重写了的话,那么如果派生类的赋值运算符重载函数里没有显示的调用的基类的赋值运算符重载函数,那么基类的赋值运算符重载函数是不会被调用的,当派生类对象调用赋值运算符重载函数时,基类部分的值是不会被赋值的。
所以,当我们基类和派生类都写了的话,那么在派生类中一定要显示的调用基类的赋值运算符重载函数。
当有菱形继承时,第一个类有指针,需要写赋值运算符重载函数,中间两个类因为本类中没有指针成员,所以不需要写,当他们使用赋值运算符时,系统会提供一个默认的赋值运算符重载函数,在这个函数中,系统会调用基类重写的赋值运算符重载函数,对指针成员进行深拷贝。而在最后一个类中,因为此类也有指针成员,所以也需要写赋值运算符重载函数,但是在这个函数中,我们需要显示的去调用第一个类的赋值运算符重载函数,也需要显示的调用本类继承前两个类的赋值运算符重载函数,尽管前两个类有默认的赋值运算符重载函数,但是在这里边不会去调用基类的赋值运算符重载函数,它只会对本类的数据成员进行赋值,不会对基类的成员赋值,就类似于构造函数一样(因为采用的是虚继承)。
如果基类中重写了赋值运算符重载函数,派生类中也重写了的话,那么如果派生类的赋值运算符重载函数里没有显示的调用的基类的赋值运算符重载函数,那么基类的赋值运算符重载函数是不会被调用的,当派生类对象调用赋值运算符重载函数时,基类部分的值是不会被赋值的。
所以,当我们基类和派生类都写了的话,那么在派生类中一定要显示的调用基类的赋值运算符重载函数。
当有菱形继承时,第一个类有指针,需要写赋值运算符重载函数,中间两个类因为本类中没有指针成员,所以不需要写,当他们使用赋值运算符时,系统会提供一个默认的赋值运算符重载函数,在这个函数中,系统会调用基类重写的赋值运算符重载函数,对指针成员进行深拷贝。而在最后一个类中,因为此类也有指针成员,所以也需要写赋值运算符重载函数,但是在这个函数中,我们需要显示的去调用第一个类的赋值运算符重载函数,也需要显示的调用本类继承前两个类的赋值运算符重载函数,尽管前两个类有默认的赋值运算符重载函数,但是在这里边不会去调用基类的赋值运算符重载函数,它只会对本类的数据成员进行赋值,不会对基类的成员赋值,就类似于构造函数一样(因为采用的是虚继承)。
- C++中赋值运算符能不能被派生类继承
- 关于C++赋值运算符能不能继承问题
- 【C++】继承派生中对象相互赋值情况
- 【C++的探索路12】继承与派生之高级篇--派生类与赋值运算符=以及多重继承(未完待续)
- 派生类的赋值运算符也必须处理它的基类成员的赋值(源自effictive c++)
- 派生类的复制构造函数与赋值运算符
- 继承---派生类(C++)
- [C++]继承和派生类
- C++: 类的继承派生
- O-c中类的继承与派生的概念
- C语言中 继承与派生
- 为什么C++赋值运算符重载函数不能被继承?
- 为什么C++赋值运算符重载函数不能被继承?
- 为什么C++赋值运算符重载函数不能被继承?
- 赋值运算符重载函数被继承了吗?
- 为什么C++赋值运算符重载函数不能被继承?
- 为什么C++赋值运算符重载函数不能被继承?
- 为什么C++赋值运算符重载函数不能被继承?
- Android ViewGroup中事件触发和传递机制
- java反射详解
- kernel version magic error
- this和arguments
- 23种设计模式(14):解释器模式
- C++中赋值运算符能不能被派生类继承
- javascript里的document.all用法
- 显示器热插拔的检测
- 的供货商东方红事发后
- visual studio最近项目没有显示的解决方法
- 23种设计模式(15):备忘录模式
- java生成xml文件
- 是付伙食费单个到萨嘎
- Android 程式开发:(廿一)消息传递 —— 21.4 发送Email