在网上搜索相关资料时,看到有人说,赋值操作符可以被继承,并且给出了一个例子。

一时间,也没想出那个例子错在哪里。

例子代码如下:

#include <iostream>
using namespace std; class A {
public:
A& operator=(const A& obj) {
cout << "the = operator called!" << endl;
return *this;
}
}; class B: public A{
private:
int data; public:
B(int data) {
this->data = data;
} void printNum() {
cout << this->data << endl;
}
}; int main() {
B a(10), b(20);
a = b;
a.printNum();
b.printNum();
return 0;
}

在上面这个例子中,派生类调用了基类的赋值操作符,但是这不能表明派生类继承了基类的赋值操作符。

当派生类没有形如 B& operator=(const B& t);这样的赋值操作符函数时,编译器会自动生成一个默认的赋值操作符函数。

同时这个函数,会去调用基类的赋值操作符函数。这也就是我们上面这个例子,让我们误以为继承了基类赋值操作函数的原因。

我们知道满足以下一个条件时,编译器并不会为类提供默认的赋值操作函数。

①类中含有常数据成员

②类中含有引用类型的成员

因此,如果将类B改写为:

class B: public A{
private:
const int data = 1; public:
B(int _data):data(_data) {
} void printNum() {
cout << this->data << endl;
}
};

那么,这个时候就会报错。

最新文章

  1. T-SQL学习记录
  2. W3School-CSS 轮廓(Outline)实例
  3. [转] c# 模拟Asp.net页面中的某个按钮的点击,向web服务器发出请求
  4. the fifth class
  5. iOS内存管理个人总结
  6. windows server2012和win8安装.netframework3.5失败问题及解决方法
  7. Java IO之一读取文件
  8. JZ2440开发笔记(7)——2440启动方式
  9. c++学习笔记2(c++简单程序)
  10. 在Nginx中搭建Nagios监控平台
  11. Python中lambda用法
  12. oracle日期时间函数 总结
  13. 转:面向切面编程AOP的理解
  14. [html5] 初识绘图canvas
  15. xss框架基础框架实现
  16. Luogu P1690 贪婪的Copy
  17. [福大软工] W班 第2次成绩排行榜
  18. ==运算符和equals()方法的区别
  19. hadoop记录-hadoop集群日常运维命令
  20. 非极大值抑制(NMS)

热门文章

  1. pytorch数学运算与统计属性入门(非常易懂)
  2. 类欧几里得模板 p5170
  3. zxEditor
  4. input的number类型只能输入正数,禁止负数输入
  5. Linux /dev/sda1磁盘满了,清理办法
  6. power-plan如何定
  7. OracleDBConsoleorcl 服务无法启动:Agent process exited abnormally during initialization.
  8. Dart语言学习(三)Dart数值型
  9. 如何修改mysql 默认引擎为InnoDB?
  10. 洛谷 P1843 奶牛晒衣服(二分答案)