C++赋值操作符不能继承
2024-10-08 10:51:30
在网上搜索相关资料时,看到有人说,赋值操作符可以被继承,并且给出了一个例子。
一时间,也没想出那个例子错在哪里。
例子代码如下:
#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;
}
};
那么,这个时候就会报错。
最新文章
- T-SQL学习记录
- W3School-CSS 轮廓(Outline)实例
- [转] c# 模拟Asp.net页面中的某个按钮的点击,向web服务器发出请求
- the fifth class
- iOS内存管理个人总结
- windows server2012和win8安装.netframework3.5失败问题及解决方法
- Java IO之一读取文件
- JZ2440开发笔记(7)——2440启动方式
- c++学习笔记2(c++简单程序)
- 在Nginx中搭建Nagios监控平台
- Python中lambda用法
- oracle日期时间函数 总结
- 转:面向切面编程AOP的理解
- [html5] 初识绘图canvas
- xss框架基础框架实现
- Luogu P1690 贪婪的Copy
- [福大软工] W班 第2次成绩排行榜
- ==运算符和equals()方法的区别
- hadoop记录-hadoop集群日常运维命令
- 非极大值抑制(NMS)