重载运算符需注意:

1.重载=运算符时容易忘记写返回值。

2.重载赋值运算符时,记得加const,因为赋值操作必须是固定的右值。

3重载时,写在类中的只能有一个参数(实际有两个参数,另外一个是this指针,我们看不见而已),需要两个参数的时候,要写在类外,用友元在类内声明。

4.重载递增运算符时,要注意哪个要加引用,哪个不用加引用。

//重载前置++运算符  返回引用是为了一直对一个数据进行递增操作MyInteger &operator++() {//先进行++运算m_Num++;//再将自身做一个返回return *this;}//重载后置++运算符//这个int代表的是占位参数,可以用于区分前置和后置递增MyInteger operator++(int) { //后置递增返回的是值,不能是引用//先 返回结果MyInteger temp = *this;//后 递增m_Num++;//最后将记录结果做返回return temp;

代码如下:

#include <iostream>
using namespace std;class Base
{public:Base():num(0){}Base(const Base &a){this->num = a.num;int len = strlen(a.name);this->name = new char[len + 1];for (int i = 0; i < len; i++) this->name[i] = a.name[i];this->name[len] = '\0';}~Base(){if (name != nullptr) delete[] name;}Base(const char *name, int num) :num(num){int len = strlen(name);this->name = new char[len+1];for (int i = 0; i < len; i++) this->name[i] = name[i];this->name[len] = '\0';}Base operator+(Base &a){Base tmp;tmp.num = this->num + a.num;int len1 = strlen(this->name);int len2 = strlen(a.name);int len3 = len1 + len2;tmp.name = new char[len3 + 1];for (int i = 0; i < len1; i++) tmp.name[i] = this->name[i];for (int i = len1; i < len3; i++) tmp.name[i] =a.name[i-len1];tmp.name[len3] = '\0';return tmp;}Base operator+( const int a){Base tmp(*this);tmp.num += a;return tmp;}friend Base operator+(const int, Base&);friend ostream&operator<<(ostream &, const Base&);friend istream &operator>>(istream &, Base&);Base operator()(const char a[], int b){if (name != nullptr) delete[] name;int len = strlen(a);name = new char[len + 1];for (int i = 0; i < len; i++) name[i] = a[i];name[len] = '\0';num = b;return *this;}bool operator==(const Base &a){if (name == a.name && num == a.num) return true;int len1 = strlen(a.name);int len2 = strlen(this->name);if (len1 == len2 && num == a.num){for (int i = 0; i < len1; i++){if (name[i] != a.name[i]) return false;}return true;}return false;}bool operator !=(const Base &a){if (*this == a) return false;else return true;}Base &operator=(const Base &a){if (this == &a) return *this;if (name != nullptr) delete[]  name;int len = strlen(a.name);name = new char[len + 1];for (int i = 0; i < len; i++) name[i] = a.name[i];name[len] = '\0';num = a.num;return *this;}Base operator++(int){Base tmp(*this);num++;return tmp;}Base &operator++(){num++;return *this;}void print(){cout << "name = " << name << endl;cout << "num = " << num << endl;}private:int num;char *name;
};ostream&operator<<(ostream &os,const  Base&p)
{os << "name = " << p.name << endl;os << "num = " << p.num << endl;return os;
}istream &operator>>(istream &in, Base &p)
{char c[10000];in >> c;int len = strlen(c);p.name = new char[len + 1];for (int i = 0; i < len; i++) p.name[i] = c[i];p.name[len] = '\0';in >> p.num;return in;
}Base operator+(const int a, Base& b)
{Base tmp(b);b.num += a;return tmp;
}int main()
{Base b("xiaom", 12);cout << b << endl;Base x("ADA", 32);x = x;Base c = b + x;cout << c << endl;cout<<x++<<endl;cout << ++x << endl;c = x;cout << c << endl;Base v = c + 32;int k = 3;Base x2 = c + k;Base x3 = k + c;cout << c << endl;cout << v << endl;v("hhh", 30);cout << v << endl;v = (c + 32);return 0;
}

C++重载运算符小结与注意点相关推荐

  1. C++ 重载运算符简单举例

    我们可以重定义或重载大部分 C++ 内置的运算符.这样,就能使用自定义类型的运算符. 重载的运算符是带有特殊名称的函数,函数名是由关键字 operator 和其后要重载的运算符符号构成的.与其他函数一 ...

  2. 【C++】重载运算符(一)

    1.1 重载运算符特点 重载运算符本质上是一次函数调用 除了operator() 运算符调用外,其他重载运算符不能含有默认参数. 当重载的运算符是成员函数时,this绑定到左侧运算对象.成员运算符函数 ...

  3. 4.0 C++远征:重载运算符

    目录 重载运算符 四.重载运算符 1.一元运算符重载 2.二元运算符重载 重载运算符 四.重载运算符 ​ 概念 : 给原有运算符赋予新功能. ​ 本质 : 函数重载. ​ 关键字 : operator ...

  4. 中双目运算符_C++日志(四十)教你如何以非成员函数的形式重载运算符

    上一篇日志中讲述了如何通过类的非静态函数成员,进行运算符重载: 机器学习入坑者:C++日志(三十九)教你如何以类的非静态成员函数形式重载运算符​zhuanlan.zhihu.com 在C++中,同样可 ...

  5. C++中自定义比较函数和重载运算符总结

    sort 自定义比较函数 //示例 struct node{int x, y; };bool cmp(const node& a, const node& b){return a.x ...

  6. 【C++ 语言】面向对象 ( 函数重载 | 运算符重载 | 运算符重载两种定义方式 | 拷贝构造方法 | RVO 优化 | NRVO 优化 )

    文章目录 函数重载 运算符重载 ( 类内部定义云算符重载 ) 运算符重载 ( 类外部定义运算符重载 ) 可重载的运算符 拷贝构造方法 编译器优化 ( RVO 优化 | NRVO 优化 ) 完整代码示例 ...

  7. C++——重载运算符和重载函数

    重载运算符和重载函数 C++ 中的函数重载 C++ 中的运算符重载 C++ 一元运算符重载 C++ 二元运算符重载 C++ 关系运算符重载 C++ 输入/输出运算符重载 C++ 赋值运算符重载 C++ ...

  8. [YTU]_2442( C++习题 矩阵求和--重载运算符)

    题目描述 有两个矩阵a和b,均为2行3列.求两个矩阵之和.重载运算符"+",使之能用于矩阵相加(如c=a+b). 重载流插入运算符"<<"和流提取运 ...

  9. [YTU]_2440( C++习题 复数类--重载运算符+,-,*,/)

    题目描述 定义一个复数类Complex,重载运算符"+","-","*","/",使之能用于复数的加.减.乘.除.运算符 ...

最新文章

  1. mqtt+htttp+websocket
  2. 数字IC设计各种仿真波形文件
  3. JavaEE 的基本实现
  4. 女朋友掉水里,各类程序猿怎么救?
  5. 记一次Java面试中遇到的三个问题及感悟!
  6. mysql 数据库的 导入于导出
  7. springboot+activiti工作流mybatis冲突解决办法
  8. SCAU高级语言程序设计--实验6 循环结构(二)(3)
  9. 【LeetCode-13】-罗马数字
  10. 二进制数与十进制数的相互转换、二进制数的乘除运算、移位运算
  11. CH340G的调试过程
  12. 【C语言】函数的理解——关于函数的声明
  13. 计算机十进制转为八位二进制,Java将十进制转换为8位二进制(Java convert from decimal to 8-bit binary)...
  14. 强引用,软引用,弱引用,虚引用
  15. 软件工程导论期末考点总结
  16. fl2440——按键控制madplay音乐播放器
  17. 87-Python_某电商平台上销售不同规格包装、不同价格的水笔。编写程序,在不考虑运费的情况下,从键盘分别输人两种水笔的包装和价格,分别计算单根水笔的价格,根据价格就低原则打印输出选择购买哪种产品
  18. 极通EWEBS 5.0盛装上市
  19. js 在页面打印九九乘法表
  20. [BMZCTF]-WEB_ezphp

热门文章

  1. 【ArcGIS风暴】根据海拔(坡度)范围分级统计土地覆盖的类型和面积(兰州市GlobeLand30m数据为例)
  2. ArcGIS 10.5专题地图制作自定义漂亮图框
  3. C# dataGridView隔行显示不同颜色
  4. Android之替换App桌面图标
  5. Android之基于xmpp openfire smack开发之Android客户端开发[3]
  6. java 定时 spring_Spring定时任务实现与配置(一)
  7. python写小猪佩奇_python之小猪佩奇
  8. 从飞机上看下雨是这样子,太震撼了!
  9. Spark ML - 聚类算法
  10. 00截断上传绕过_小谈截断上传漏洞