C++简单又好用的基本运算符重载

目录
  • 运算符重载概念
  • 加号运算符重载
    • 成员函数实现
    • 全局函数实现
  • 运算符实现函数重载
  • 总结

运算符重载概念

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

我们知道已有的运算符有'+'、'-'、'*'、'/'等,这些运算符对于内置数据类型可以直接使用,例如int、float、double、char等等。但是如果我们定义一个类,想实现类中对象属性的加减乘除运算,该怎么实现呢?那就用到运算符重载的知识点了。

加号运算符重载

学会一个顶四个,这篇博文只举例加号运算符重载

成员函数实现

示例:

class Person
{
public:
	Person operator+(Person p)
	{
		Person temp;
		temp.m_a = this->m_a + p.m_a;
		temp.m_b = this->m_b + p.m_b;
		return temp;
	}
	int m_a;
	int m_b;
};
int main()
{
    Person p1, p2;
    p1.m_a = 10, p2.m_a=20;
    p1.m_b = 30, p2.m_b = 40;
    Person pa = p1.operator+(p2);
    Person pb =p1+p2;
}

定义Person类,声明两个整型属性,我们都知道在类内定义的函数为成员函数或者方法;这个成员函数的返回值为Person类型,意为返回的话会自动调用编译器提供的拷贝构造函数,这个在前面的文章已经提到过,这里注意函数名不要自定义了,就写operator+,英文意思就是’+‘操作,这样定义符合编译器规范,可以使用简化版的运算,然后参数也是Person类型的,这是因为我们的目的就是要实现自定义类型的运算;该函数的实现也很简单,就是将各属性相加后的结果返回给新的对象;主函数中pa和pb的两个属性均会相等,pa的调用是重载的本质调用,pb的则是简化的调用,看一下运行结果:

全局函数实现

示例:

Person operator+(Person p1,Person p2)
{
	Person temp;
	temp.m_a = p1.m_a + p2.m_a;
	temp.m_b = p1.m_b + p2.m_b;
	return temp;
}
Person pa = operator+(p1, p2);
Person pb = p1+p2;

在类外面定义的函数为全局函数,和上面成员函数的区别就是多了一个Person类型的参数而已;也是新建一个对象,让其属性等于参数的属性之和,最后返回这个结果,我们还是只需要新创建一个对象来等于这个结果就行了,全局函数也分本质调用和简化调用两种。

运算符实现函数重载

运算符重载也可以发生函数重载,就是在同一个作用域下,相同函数名的函数可以实现不一样的功能。

示例:

Person operator+(Person p1, int v)
{
	Person temp;
	temp.m_a = p1.m_a + v;
	temp.m_b = p1.m_b + v;
	return temp;
}

这里是一个全局函数的写法,传入对象参数p1和整型数据v,让新建对象的属性等于传入对象参数的属性都和v相加并返回该结果给新创建的对象,写完改函数就可以直接进行这样的调用了:

int main()
{
	Person p1, p2;
	p1.m_a = 10, p2.m_a=20;
	p1.m_b = 30, p2.m_b = 40;
	Person pa = p1 + p2;
	Person pb = operator+(p1, p2);
	Person p4 = pa + pb;
	Person p5 = p4 + 10;
	cout << "pa的属性为:" <<pa.m_a << pa.m_b << endl;
	cout << "pb的属性为:" <<pb.m_a << pb.m_b << endl;
	cout << "p4的属性为:" <<p4.m_a << p4.m_b << endl;
	cout << "p5的属性为:" << p5.m_a << p5.m_b << endl;
}

运行效果:

总结

直接对自定义的类进行运算应该很舒服吧,反正我用着很爽,另外的减号、乘除的重载可以按照加号运算符重载的方法一步步实现,有兴趣的朋友一定早已跃跃欲试了,感谢大家的观看,快去尝试吧

到此这篇关于C++简单又好用的基本运算符重载的文章就介绍到这了,更多相关C++运算符重载内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • C++运算符重载详情介绍

    文章转自公众号:Coder梁(ID:Coder_LT) C++当中除了函数可以重载之外,其实运算符也是可以重载的.我们之前已经接触过一些,可能大家没有意识到. 举个例子,乘号*,运用在指针上,就是取值的意思,而运用在算数当中,则是乘法的意思.同样一个符号,用在不同的地方,起到了不同的效果.这其实就是一种重载,C++根据操作数的数目和类型来决定要使用哪一种操作. 另外C++允许将运算符重载扩展到用户自定义的类型,也就是结构体和类当中.比如,我们可以将重载加号,对两个对象相加. 其实这种用法也出现过

  • C++深入探究类与对象之友元与运算符重载

    目录 友元 1 全局函数做友元 2 类做友元 3 成员函数做友元 运算符重载 1 加号运算符重载 2 左移运算符重载 3 递增运算符重载 4 赋值运算符重载 5 关系运算符重载 6 函数调用运算符重载 友元 生活中你的家有客厅(Public),有你的卧室(Private),客厅所有来的客人都可以进去,但是你的卧室是私有的,也就是说只有你能进去,但是呢,你也可以允许你的好闺蜜好基友进去. 在程序里,有些私有属性也想让类外特殊的一些函数或者类进行访问,就需要用到友元的技术. 友元的目的就是让一个函数

  • C++深度探索运算符重载和返回值优化

    目录 问题背景 具体问题 测试代码   今天遇到的是内存释放错误的问题.原因是没写拷贝构造函数,奇怪的是我之前也没写确实能正常工作的,今天深究了一下发现是编译器做了返回值优化. 问题背景   编译环境还是针对C6455 DSP,为了做一些简单的图像直方图的处理,并且尽可能不用模板类,我自己写了一个简单的类用来存放带长度信息的数组,并且可以做一些简单的运算.重载了减法运算符,从而可以对两个直方图求差. 具体问题   当类中有那种需要动态分配空间的成员的时候,要记得提醒自己重载拷贝构造函数和赋值运算

  • C++中的运算符重载详解

    目录 1.引例 2.类中自动建立的函数 3.重载赋值运算符解析 总结 1.引例 class Complex { private: double Real,Image; public: Complex():Real(0),Image(0) {} Complex(double r, double i) : Real(r),Image(i) {} ~Complex() {} }; int main() { Complex c1(1.2,2.3); Complex c2(45,56); Complex

  • C++重载运算符你真的了解吗

    目录 1.重载运算符的必要性 2.重载运算符的形式与规则 3.重载运算符的运算 4.转义运算符 总结 运算符实际上是一个函数,所以运算符的重载实际上是函数的重载,.编译程序对运算符的重载的选择,遵循函数重载的选择原则.当遇到不很明显的运算时,编译程序会寻找与参数相匹配的运算符函数. 1.重载运算符的必要性 C++语言中的数据类型分为基本数据类型和构造数据类型.基本数据类型可以直接完成算术运算.例如: #include<bits/stdc++.h> using namespace std; in

  • C++类与对象之运算符重载详解

    目录 运算符重载 加号运算符重载 左移运算符重载 递增运算符重载 递减运算符重载 赋值运算符重载 关系运算符重载 函数调用运算符重载 总结 运算符重载 运算符重载概念:对已有的运算符重新进行定义,赋予其另一种功能,以适应不同的数据类型 加号运算符重载 作用:实现两个自定义数据类型相加的运算 #include <iostream> using namespace std; class Person { public: // 构造函数 Person(int num1, int num2){ thi

  • C++运算符重载限制介绍

    目录 一.重载限制 1.必须至少有一个操作数是用户定义的类型 2.不能违反运算符原来的规则 3.不能创建新运算符 4.禁止名单 5.部分运算符只能通过成员函数重载  文章转自公众号:Coder梁(ID:Coder_LT) 一.重载限制 上一篇我们讲了在类和结构体当中重载运算符,关于运算符的重载并不是随心所欲的.C++给出了一些限制,从而保证了规范,以及程序运行的准确性. 下面我们就来一一来看下: 1.必须至少有一个操作数是用户定义的类型 这句话看不明白没有关系,我们只需要记住它的目的就好了.它的

  • C++基础知识之运算符重载详解

    目录 运算符重载 方式一,使用成员函数重载运算符需求:把牛肉换猪肉,羊肉换猪肉 方式二,使用非成员函数[友元函数]重载运算符 两种方式的区别 两种方式的选择: 总结 运算符重载 为什么要使用运算符重载 -C/C++的运算符,支持的数据类型,仅限于基本数据类型. 问题:一头牛+一头马 = ?(牛马神兽?) 一个圆 +一个圆 = ? (想要变成一个更大的圆)一头牛 – 一只羊 = ? (想要变成4只羊,原始的以物易物:1头牛价值5只羊) 解决方案: 使用运算符重载 方式一, 使用成员函数重载运算符

  • C++超详细讲解运算符重载

    目录 概念 赋值运算符重载 const成员 取地址及const取地址操作符重载 概念 C++为了增强代码的可读性引入了运算符重载,运算符重载是具有特殊函数名的函数,也具有其返回值类 型,函数名字以及参数列表,其返回值类型与参数列表与普通的函数类似. 函数名字为:关键字operator后面接需要重载的运算符符号. 函数原型:返回值类型 operator操作符(参数列表) 需要注意的几点: 不能通过连接其他符号来创建新的操作符:比如operator@,必须是已有的操作符: 重载操作符必须有一个类类型

  • C++简单又好用的基本运算符重载

    目录 运算符重载概念 加号运算符重载 成员函数实现 全局函数实现 运算符实现函数重载 总结 运算符重载概念 对已有的运算符进行重新定义,赋予其另外一种功能,以适应不同的数据类型 我们知道已有的运算符有'+'.'-'.'*'.'/'等,这些运算符对于内置数据类型可以直接使用,例如int.float.double.char等等.但是如果我们定义一个类,想实现类中对象属性的加减乘除运算,该怎么实现呢?那就用到运算符重载的知识点了. 加号运算符重载 学会一个顶四个,这篇博文只举例加号运算符重载 成员函数

  • 一文搞懂C++中的运算符重载

    目录 引入 一.运算符重载是什么 二.运算符重载的格式 三.部分运算符重载的实现 3.1 简单‘ + ’ ‘ - ’ ‘ * ’运算符重载 3.2 ++,- - 运算符 3.3 =运算符 3.4 <<,>>运算符 四.运算符重载注意事项 五.运算符重载的限制 六.MyString的简单实现 MyString.h MyString.cpp 引入 对于基本类型的常量或变量进行运算时,我们可以使用 +.-.*./ 等运算符,但是我们不可以使用运算符来进行对象之间的运算. eg:对象之间的

  • Python运算符重载的简单实例代码

    目录 什么是运算符重载 以__pow__为例 反向运算符的重载 总结 什么是运算符重载 让自定义的类生成的对象(实例)能够使用运算符进行操作 作用: 让自定义的实例像内建对象一样进行运算符操作 让程序简洁易读 对自定义对象将运算符赋予新的规则 算术运算符的重载: 方法名                  运算符和表达式      说明            __add__(self,rhs)        self + rhs        加法            __sub__(self,

  • 基于运算符重载的那些事

    由于对运算符重载不是多么理解诶,于是就百度了一下,结果发现一个解释很有趣的百度知道,分享看看. 复制代码 代码如下: 回答:+-*/这样的运算符重定义,比如你自定义了一个类a,然后你可以自己重载它的这些运算符,比如+返回什么,-返回什么等等.public class a{    public string t{get;set;}    public static a operator +(a a1, a a2)   {         a b=new a();         b.t=a1.t+

  • 浅谈C++类型转化(运算符重载函数)和基本运算符重载(自增自减)

    类型转化(运算符重载函数) 用转换构造函数可以将一个指定类型的数据转换为类的对象.但是不能反过来将一个类的对象转换为一个其他类型的数据(例如将一个Complex类对象转换成double类型数据).在C++提供类型转换函数(type conversion function)来解决这个问题.类型转换函数的作用是将一个类的对象转换成另一类型的数据. 类型转换函数的一般形式为: operator 类型名( ){ 实现转换的语句 } 下面是简单实现.这时候,Base起了两方面的作用:类和数据类型.系统会在

  • Javascript实现运算符重载详解

    最近要做数据处理,自定义了一些数据结构,比如Mat,Vector,Point之类的,对于加减乘除之类的四则运算还要重复定义,代码显得不是很直观,javascript没有运算符重载这个像C++.C#之类的功能的确令人不爽,于是想"曲线救国",自动将翻译代码实现运算符重载,实现思路其实很简单,就是编写一个解释器,将代码编译.例如: S = A + B (B - C.fun())/2 + D 翻译成 `S = replace(replace(A, '+', replace(replace(B

  • 解决Python运算符重载的问题

    python进行有理数运算时,希望用运算符(+ - * /)描述计算过程. 只是用来写出更加自然的计算表达式.为此,python为所有算数运算符规定了特殊方法名.其中所有特殊的名字都以两个下划线开始,并以两个下划线结束,即: 当在Python中输入"a+b"时,程序发现使用了"+"运算符,因此就会调用"__add__"方法. 此时,若对自定义类中进行运算符的重载,则可以实现对类的打印.有理数运算等等. 其中,一个问题应当注意,如以下代码 clas

  • C++11运算符重载和向量类重载实例详解(<<,>>,+,-,*等)

    目录 1. C++运算符重载介绍 1.1 单目运算符与双目运算符 1.2 友元运算符 2. 实例讲解 2.1 头文件定义 2.2 实现运算符重载 总结 1. C++运算符重载介绍 C ++ 中预定义的运算符的操作对象只能是基本数据类型.但实际上,对于许多用户自定义类型(例如类),也需要类似的运算操作.这时就必须在C ++ 中重新定义这些运算符,赋予已有运算符新的功能,使它能够用于特定类型执行特定的操作.运算符重载的实质是函数重载,它提供了C ++ 的可扩展性,也是C ++ 最吸引人的特性之一.

  • C++中运算符重载详解及其作用介绍

    目录 概述 函数重载 运算符重载 C++ 的运算符 重载运算符的规则 成员函数实现 Complex 加法 运算符重载的方法 多种实现方法 实现 operator+= 三种运算符重载函数 成员函数实现 友元函数实现 输出结果 重载单元运算符 例子 重载二元运算符 例子 重载 I/O 插入运算符 << 提取运算符 >> 总结 概述 运算符重载 (Operator Overloading) 函数重载 重载: 将同一名字重新赋予新的含义. 函数重载: 对一个函数赋予新的含义, 使之实现新功

  • 聊聊C++ 运算符重载知识

    前言 1.运算符重载是一种形式的C++多态. 2.重载运算符可以使代码看起来更加自然. 回顾类 在正常构造类的时候,有些成员方法可以不用写出来,例如在这样一个表示时间的类中,拷贝构造函数只是浅拷贝,和系统默认的步骤是一样的,可以不用写了. 同样,析构函数如果在对象死亡之前没有必须要做的事情,也可以不用写. 所以在下面的例子中,拷贝构造和析构函数可以省略. class Time { public: Time(); Time(const Time& src) { _hour = src._hour;

随机推荐