C++重载运算符小结与注意点

重载运算符需注意:

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;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/309627.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

开发大会上,前微软CEO放出的狠话!.NET开发随时起飞,你准备好了吗?

“开发者&#xff0c;开发者&#xff0c;开发者&#xff0c;开发者”&#xff0c;微软前任CEO史蒂夫鲍尔默(Steve Ballmer)用这种略带疯狂、又唱又跳的方式表达他对开发者的热爱。不夸张的说&#xff0c;相比二十年前那个如日中天的巨无霸微软&#xff0c;现在的微软比以往任何…

Balanced Lineup POJ - 3264(线段树模板+查询比大小+建树)

题意&#xff1a; 给你n个数&#xff0c;然后问一段区间的最大的差值是多少。 题目&#xff1a; For the daily milking, Farmer John’s N cows (1 ≤ N ≤ 50,000) always line up in the same order. One day Farmer John decides to organize a game of Ultimate Frisbe…

第二讲 命令源码文件

此为 《极客时间&Go语言核心36讲》 个人笔记&#xff0c;具体课程详见极客时间官网。 Table of Contents generated with DocToc 第二讲 命令源码文件 1. 什么是命令源码文件&#xff1f;2. 命令参数的接收和解析 2.1 命令源码文件怎么接收参数?2.2 怎样在运行源代码文件…

程序员过关斩将--为微服务撸一个简约而不简单的配置中心

点击上方蓝字 关注我们毫不犹豫的说&#xff0c;现代高速发展的互联网造就了一批又一批的网络红人&#xff0c;这一批批网红又极大的催生了特定平台的一大波流量&#xff0c;但是留给了程序员却是一地鸡毛&#xff0c;无论是运维还是开发&#xff0c;每天都会担心服务器崩溃&a…

Just a Hook HDU - 1698(查询区间求和+最基础模板)

题意&#xff1a; 给你一个1~n的区间&#xff0c;起始区间内均为1&#xff0c;然后对子区间进行值更新&#xff0c;最后求区间和。 题目&#xff1a; In the game of DotA, Pudge’s meat hook is actually the most horrible thing for most of the heroes. The hook is ma…

DDIA笔记——数据复制

Table of Contents generated with DocToc 此篇为《数据密集型应用系统设计》&#xff08;DDIA&#xff09;读书笔记&#xff0c;笔记可能存在遗漏&#xff0c;建议直接阅读原书。 第五章 数据复制 主从复制 复制滞后复制滞后带来的问题 多主节点复制 适用场景处理写冲突拓扑结…

基于 abp vNext 和 .NET Core 开发博客项目 - 集成Hangfire实现定时任务处理

上一篇文章成功使用了Redis缓存数据&#xff0c;大大提高博客的响应性能。接下来&#xff0c;将完成一个任务调度中心&#xff0c;关于定时任务有多种处理方式&#xff0c;如果你的需求比较简单&#xff0c;比如就是单纯的过多少时间循环执行某个操作&#xff0c;可以直接使用.…

Docker基本组成 和 基本命令

此篇为Docker笔记&#xff0c;文章可能存在疏忽&#xff0c;建议直接观看原视频。 视频地址&#xff1a;https://www.bilibili.com/video/BV1og4y1q7M4?spm_id_from333.999.0.0 Docker基本组成 和 基本命令 镜像 image&#xff1a;就好比一个模板&#xff0c;可以通过这个模板…

Assign the task HDU - 3974(线段树+dfs建树+单点查询+区间修改)

题意&#xff1a; 染色问题&#xff1a;给一个固定结构的树&#xff0c;现在有两个操作&#xff1a; &#xff08;1&#xff09; y 将结点x及其所有后代结点染成颜色y&#xff1b; &#xff08;2&#xff09;查询结点x当前的颜色。 其实就是区间染色问题&#xff0c;不过需要d…

Docker镜像讲解

此篇为Docker笔记&#xff0c;文章可能存在疏忽&#xff0c;建议直接观看原视频。 视频地址&#xff1a;https://www.bilibili.com/video/BV1og4y1q7M4?spm_id_from333.999.0.0 参考&#xff1a;https://blog.csdn.net/11b202/article/details/21389067 Docker镜像讲解 镜像是…

Making the Grade POJ - 3666(离散化+dp)

题意&#xff1a; 给你n个山的高度&#xff0c;单独的一个数可以任意加减&#xff0c;让经过对每座山峰任意加减高度后变成递增或递减的序列时&#xff0c;求对每个数的相加或相减的数目的最小和。 题目&#xff1a; A straight dirt road connects two fields on FJ’s far…

Kubernetes的安全性怎么解?从4个方面为你列出方案清单

导语Kubernetes中的安全性是一个多维问题&#xff0c;必须从各个不同的角度来解决才算完善&#xff0c;这篇文章将从4个方面为读者列出安全清单。正文Kubernetes&#xff0c;经过更快的采用和社区的更多贡献&#xff0c;正日益攀登到新的高度。不过&#xff0c;安全性仍然是Kub…

DDIA笔记—第六章 数据分区

第六章 数据分区 数据分区与数据复制 分区通常与复制结合使用&#xff0c;即每个分区在多个节点都存在副本&#xff0c;这就意味着某条记录属于特定的分区&#xff0c;而同样的内容会保存在不同的节点上以提高系统的容错性。 每个节点同时充当某些分区的主副本和其他分区的从…

Piggy-Bank POJ - 1384(完全背包+背包放满)

题意&#xff1a; 给出一个存钱罐的重量和没存钱之前存钱罐的重量&#xff0c;然后给出几种硬币的重量和币值&#xff0c;计算存钱罐里至少有多少钱。 题目&#xff1a; Before ACM can do anything, a budget must be prepared and the necessary financial support obtain…

Magicodes.IE 2.2发布

Magicodes.IE 2.2发布导入导出通用库&#xff0c;支持DTO导入导出以及动态导出&#xff0c;支持Excel、Word、PDF、CSV和HTML。已加入ncc开源组织.Magicodes.IE2.0发布Magicodes.IE2.1发布如何做好一个开源项目(一)GitHub&#xff1a;https://github.com/dotnetcore/Magicodes.…

C++ 基类,子对象,派生类构造函数调用顺序

#include <iostream> using namespace std;class A {public:A( ) {cout << "A Constructor………" << endl;}~A( ) {cout << "A Destructor………" << endl;} };class B: public A {public:B( ) {cout << "B …