首页 > 其他分享 >类和对象-运算符重载

类和对象-运算符重载

时间:2022-09-02 23:36:46浏览次数:73  
标签:p2 10 p1 person int 运算符 对象 tempt 重载

运算符重载

运算符重载概念:对已有的运算符重新进行定义,赋予其另一种功能,以适应不同的数据类型

4.5.1 加号运算符重载

作用:实现两个自定义数据类型相加的运算

 

 

成员函数加法重载运算

 1 #include <iostream>
 2 using namespace std;
 3 int a = 10;
 4 int b = 10;
 5 int c = a + b;
 6 class person
 7 {
 8 public:
 9     int m_a;
10     int m_b;
11     person operator+ (person& p)
12     {
13         person tempt;
14         tempt.m_a = m_a + p.m_a;
15         tempt.m_b = m_b + p.m_b;
16         return tempt;
17     }
18 };
19 int main()
20 {
21     person p1;
22     p1.m_a = 10;
23     p1.m_b = 10;
24     person p2;
25     p2.m_a = 10;
26     p2.m_b = 10;
27     person p3 = p1 + p2; //本质上是 :p1.operaor+(p2)
28 cout <<"p1.m_a +p2.m_a = " << p3.m_a << endl 29 << "p1.m_b +p2.m_b = " << p3.m_b << endl; 30 }

 

 全局函数加法重载运算

 1 #include <iostream>
 2 using namespace std;
 3 int a = 10;
 4 int b = 10;
 5 int c = a + b;
 6 class person
 7 {
 8 public:
 9     int m_a;
10     int m_b;
11 };
12 person operator+ (person& p1, person& p2)
13 {
14     person tempt;
15     tempt.m_a = p1.m_a + p2.m_a;
16     tempt.m_b = p1.m_b + p2.m_b;
17     return tempt;
18 }
19 int main()
20 {
21     person p1;
22     p1.m_a = 10;
23     p1.m_b = 10;
24     person p2;
25     p2.m_a = 10;
26     p2.m_b = 10;
27     person p3 = p1 + p2 ;//本质上是operator+(p1,p2)
28 cout <<"p1.m_a +p2.m_a = " << p3.m_a << endl 29 << "p1.m_b +p2.m_b = " << p3.m_b << endl; 30 }

 

 运算符的函数重载

 1 #include <iostream>
 2 using namespace std;
 3 int a = 10;
 4 int b = 10;
 5 int c = a + b;
 6 class person
 7 {
 8 public:
 9     int m_a;
10     int m_b;
11 };
12 person operator+ (person& p1, int num )
13 {
14     person tempt;
15     tempt.m_a = p1.m_a + num ;
16     tempt.m_b = p1.m_b + num;
17     return tempt;
18 }
19 int main()
20 {
21     person p1;
22     p1.m_a = 10;
23     p1.m_b = 10;
24     person p3 = p1 + 10;
25     cout <<"p1.m_a +num = "  << p3.m_a << endl
26         << "p1.m_b +num = " << p3.m_b << endl;
27 }

 

 

总结1:对于内置的数据类型(比如int类型)的表达式的的运算符是不可能改变的

总结2:不要滥用运算符重载(比如加法写成减法等等,会让人看不懂)

标签:p2,10,p1,person,int,运算符,对象,tempt,重载
From: https://www.cnblogs.com/zaiyewujiang/p/16651656.html

相关文章

  • node41-node全局对象global
     global.console.log('我是歌谣');global.setTimeout(function(){console.log('123');},2000) ......
  • 对象流序列号与反序列号
    /*序列化过程:将内存中的java对象保存到磁盘中或通过网络传输出去,使用ObjectOutputStream*/@Testpublicvoidtest5()throwsIOException{......
  • C#-装箱与拆箱/预编译指令与对象初始化器
    装箱与拆箱1.概念装箱:值类型-->引用类型拆箱:引用类型-->值类型两种类型只有存在继承关系的时候,才可能出现装箱或拆箱操作。2.注意事项装箱和拆箱本质上是数据存储在......
  • django_响应对象
    Django_响应对象响应对象响应对象有三种形式:HttpResponse()render()Redirect()(1)HttpResponse()django服务器接收到客户端发来的请求之后,会将提交上来的数据封装成......
  • 记一则由临时对象引起的 bug
    最近在用imgui写一个数据对比工具,里面需要使用Win32函数来选择文件路径。相关代码差不多是这个样子:std::stringGetOpenFilePath(conststd::string&title){char......
  • Java中具有继承的对象序列化
    在序列化中,当引入继承时,则根据超类和子类定义了某些情况,这使对每种情况下的序列化的理解变得更加简单。应遵循的基本规则如下。1.当超类实现时,可序列化接口而子类则不。......
  • 学习 python进阶 面向对象
    python中一切皆对象  绑定方法和非绑定方法  类装饰器property       函数只能有一个self,如果多个变量不能加property装饰器用途二  ......
  • 面试~jvm(JVM内存结构、类加载、双亲委派机制、对象分配,了解垃圾回收)
    一、JVM内存结构▷谈及内存结构各个部分的数据交互过程:还可以再谈及生命周期、数据共享;是否GC、是否OOM答:jvm内存结构包括程序计数器、虚拟机栈、本地方法栈、堆、方......
  • 面向对象(方法、继承、重写)
    前言本文主要介绍方法(实例方法、类方法、静态方法)、继承(单继承和多继承)以及重写等内容。一、方法1、实例方法用户自定义的方法。classStudent:#类属性stu......
  • 类图和对象图
    概述定义类图(ClassDiagram)是用于显示一组类、接口以及它们之间关系的图。类图用于对系统中的各种概念进行建模,并描绘出它们之间的关系,主要通过系统中的类以及类之间的......