前文:C++之操作符重载探究(六):重载函数调用符( )

== 运算符重载

  在很多情况下,我们需要判断两个对象是否相等,需要对==运算符进行重载。

例1:

附例1代码:

//小问学编程
#include<iostream>
using namespace std;class Person
{public:Person(string name,int age){m_name=name;m_age=age;}bool operator==(Person& p){if(m_name==p.m_name && m_age==p.m_age){return true;}return false;}
private:string m_name;int m_age;
};int main()
{Person p1("小张",15);Person p2("小问",13);Person p3("小张",15);if(p1==p2){cout<<"p1和p2相等"<<endl;}else{cout<<"p1和p2不相等"<<endl;}if(p1==p3){cout<<"p1和p3相等"<<endl;}else{cout<<"p1和p3不相等"<<endl;}
}

运行结果:


例2:(全局函数版本)(本例修改自前文:C++之操作符重载探究(五):赋值运算符重载和拷贝赋值函数(深拷贝))
增加“==运算符重载函数”:


附例2代码:

//小问学编程
#include<iostream>
using namespace std;class Vector
{public:Vector(int s,int an_array[]);//构造函数const Vector& operator=(const Vector& x);//拷贝赋值函数~Vector()//析构函数{delete[] rep;//两个独立的指针成员,避免了内存的重复删除}int get_size() const {return size;}int& operator[](int index) {return rep[index];}const int& operator[](int index) const {return rep[index];}
private:int* rep;//指针成员int size;
};Vector::Vector(int s, int an_array[]):rep(new int[s]),size(s)//构造函数
{for (int i= 0;i<size;++i){rep[i] = an_array[i];}
}const Vector& Vector::operator=(const Vector& x)//拷贝赋值函数
{if(this != &x) //step 1.避免自赋值{size = x.size;delete[] rep;       //step 2.释放成员指针的旧堆内存rep = new int[size];  //step 3.为指针成员开辟新内存空间(堆上)for (int i = 0; i < size; ++i){rep[i] = x.rep[i];//step 4.向新内存拷贝内容}}return *this; //step 5.返回*this,即返回新对象本身,即新对象的引用。
}ostream& operator<<(ostream& os, const Vector& x)//output全局函数
{int s = x.get_size( );for (int i = 0; i < s; ++i){os<< x[i]<<" ";}return os;
}bool operator==(const Vector & a, const Vector & b)
{bool yes = true;if (a.get_size() != b.get_size()){yes = false;}else{int index = 0;int s = a.get_size();while (index < s && a[index] == b[index]){++index;}if (index < 0){yes = false;}}return yes;
}int main()
{int array1[5] = {1,2,3,4,5};int array2[10] = {6,7,8,9,10,11,12,13,14,15};Vector vec1( 5, array1);Vector vec2( 10, array2);Vector vec3=vec1;cout<<vec1<<"\n"<<vec2<<"\n"<<vec3<<"\n";if(vec1==vec2){cout<<"vec1和vec2相等"<<endl;}else{cout<<"vec1和vec2不相等"<<endl;}if(vec1==vec3){cout<<"vec1和vec3相等"<<endl;}else{cout<<"vec1和vec3不相等"<<endl;}return 0;
}

运行结果:


例3:(成员函数版本)

附例3代码:

//小问学编程
#include<iostream>
using namespace std;class Vector
{public:Vector(int s,int an_array[]);//构造函数const Vector& operator=(const Vector& x);//拷贝赋值函数~Vector()//析构函数{delete[] rep;//两个独立的指针成员,避免了内存的重复删除}int get_size() const {return size;}int& operator[](int index) {return rep[index];}const int& operator[](int index) const {return rep[index];}bool operator==(const Vector& a);
private:int* rep;//指针成员int size;
};Vector::Vector(int s, int an_array[]):rep(new int[s]),size(s)//构造函数
{for (int i= 0;i<size;++i){rep[i] = an_array[i];}
}const Vector& Vector::operator=(const Vector& x)//拷贝赋值函数
{if(this != &x) //step 1.避免自赋值{size = x.size;delete[] rep;       //step 2.释放成员指针的旧堆内存rep = new int[size];  //step 3.为指针成员开辟新内存空间(堆上)for (int i = 0; i < size; ++i){rep[i] = x.rep[i];//step 4.向新内存拷贝内容}}return *this; //step 5.返回*this,即返回新对象本身,即新对象的引用。
}ostream& operator<<(ostream& os, const Vector& x)//output全局函数
{int s = x.get_size( );for (int i = 0; i < s; ++i){os<< x[i]<<" ";}return os;
}bool Vector::operator==(const Vector& a)
{bool yes = true;if(a.size != this->size){yes = false;}else{int index = 0;int s = a.get_size();while (index<s && a[index]==(*this)[index]){++index;}if(index < s){yes = false;}}return yes;
}
int main()
{int array1[5] = {1,2,3,4,5};int array2[10] = {6,7,8,9,10,11,12,13,14,15};Vector vec1( 5, array1);Vector vec2( 10, array2);Vector vec3=vec1;cout<<vec1<<"\n"<<vec2<<"\n"<<vec3<<"\n";if(vec1==vec2){cout<<"vec1和vec2相等"<<endl;}else{cout<<"vec1和vec2不相等"<<endl;}if(vec1==vec3){cout<<"vec1和vec3相等"<<endl;}else{cout<<"vec1和vec3不相等"<<endl;}return 0;
}

运行结果:

C++之操作符重载探究(七):==运算符重载相关推荐

  1. C++ 学习 ::【基础篇:17】:C++ 类与对象:运算符重载介绍、运算符重载函数(类内与类外区别)写法及简单设计实现

    本系列 C++ 相关文章 仅为笔者学习笔记记录,用自己的理解记录学习!C++ 学习系列将分为三个阶段:基础篇.STL 篇.高阶数据结构与算法篇,相关重点内容如下: 基础篇:类与对象(涉及C++的三大特 ...

  2. c++重载(以运算符重载为主)

    重载(OverLoading)是面向对象程序设计多态性的一种体现.所谓重载,是指"同一标识符"在同一作用域的不同场合具有不同的语义,这个标识符可以是函数名或运算符.也就是说,重载可 ...

  3. 运算符重载之成员运算符重载

    成员运算符重载函数 成员运算符重载函数,即把运算符重载函数定义为某个类的成员函数. 1.定义成员运算符重载函数的语法形式 (1)在类的内部,定义成员运算符重载函数的格式如下: 函数类型 operato ...

  4. (C++学习笔记七)运算符重载

    九.运算符重载 1.Code : #include<iostream> using namespace std;//运算符重载的意义: //对已有的 运算符 重新进行定义,赋予其另一项功能 ...

  5. 27、Python 面向对象(创建类、创建实例对象、访问属性、内置类属性、对象销毁、类的继承、方法重写、基础重载方法、运算符重载、类属性与方法、下划线双下划线)

    27Python面向对象(Python2) Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的.本章节我们将详细介绍Python的面向对象编程. ...

  6. python 运算符重载_Python3面向对象-运算符重载

    1:运算符重载介绍 运算符重载,就是在某个类的方法中,拦截其内置的操作(比如:+,-,*,/,比较,属性访问,等等),使其实例的行为接近内置类型. 当类的实例出现在内置操作中时(比如:两个实例相加 + ...

  7. C++_类和对象_C++运算符重载_函数调用运算符重载_---C++语言工作笔记060

    然后我们再来看函数调用运算符重载, 其实这个,重载后的,函数调用运算符有点像,仿函数,什么是仿函数,一会我们再说 我们去写一个MyPrint类 里面重载函数调用运算符,可以看到函数调用运算符的重载的写 ...

  8. C++_类和对象_C++运算符重载_加号运算符重载_实现两个对象相加_对象和int类型相加_通过成员函数重载+号_全局函数重载+号_以及重载_运算符重载函数实现---C++语言工作笔记055

    然后我们再来看,运算符的重载,首先我们来看加号的运算符的重载. 这个的作用是很明显的,比如我们有两个Person对象,p1,p2,如果我们想 p3 = p1+p2能可以嘛,不可以对吧,因为系统给我们提 ...

  9. c 运算符重载前置++_C ++运算符重载–综合指南

    c 运算符重载前置++ Hello, folks! In this article, we will understand a very interesting yet magical power p ...

最新文章

  1. UML中的stereotype
  2. android init.rc中启动的service 默认是disable的,后续如何启动此服务
  3. 2013第四届蓝桥杯Java组省赛题解析
  4. mysql,mybatis常用小知识点
  5. .NET和Docker ,比翼双飞
  6. 超详细图解!【MySQL进阶篇】MySQL架构原理
  7. 【渝粤教育】广东开放大学 物权法 形成性考核 (43)
  8. 系统架构师学习笔记-面向对象方法
  9. 从我想,到我做 | 掘金年度征文
  10. iOS 11 将于9月19日正式发布,一文带你了解它的那些特性
  11. 做好开源项目 需要坚持
  12. python 元编程有多强_马克的Python学习笔记#元编程 3
  13. linux服务器上svn的log_Linux 下 SVN 常用操作命令详解
  14. 在Kali Linux上安装LOIC
  15. Linux系统命令 - 查看内存使用情况
  16. Python中列表的常用方法总结
  17. 普通型母函数和指数型母函数
  18. 数字图像处理 - Ch3 锐化(高通)空间滤波器
  19. [足式机器人]Part1 三维空间中的跳行Ch03——【Legged Robots that Balance 读书笔记】
  20. 目前最新android处理器排行榜,2016上半年安卓手机处理器排行:骁龙820无意外夺冠...

热门文章

  1. 多份word合并 保留不同页眉_如何给Word设置不同页眉和页脚?
  2. 基于JAVA+SpringMVC+Mybatis+MYSQL的生活质量衡量系统
  3. 基于JAVA+SpringMVC+Mybatis+MYSQL的医院预约挂号系统
  4. ClassLoader类加载器
  5. Java 中子类是否只继承父类的非私有变量和方法?
  6. linux安装memcached(不错)
  7. 济群法师:《大乘百法明门论》讲记·视频·音频·MP3
  8. 初学者python笔记(模块篇)
  9. jsp页面判断输入编号已存在mysql中_面试官让我聊聊Mysql基础架构之日志文件与数据文件...
  10. oracle 32 下载,oracle 11g 32位下载