首页 > 其他分享 >29.减号运算符重载

29.减号运算符重载

时间:2022-10-05 21:25:51浏览次数:50  
标签:mB ++ 29 operator id 运算符 -- 减号 Maker

1.前置和后置(++/--)运算符重载

  重载的++和--运算符有点让人不知所措,因为我们总是希望能根据它们出现在所作用对象的前面还是后面来调用不同的函数。解决办法很简单,例如当编译器看到++a(前置++),它就调用operator++(a),当编译器看到a++(后置++),它就会去调用operator++(int)。

class Complex{
	friend ostream& operator<<(ostream& os,Complex& complex){
		os << "A:" << complex.mA << " B:" << complex.mB << endl;
		return os;
	}
public:
	Complex(){
		mA = 0;
		mB = 0;
	}
	//重载前置++
	Complex& operator++(){
		mA++;
		mB++;
		return *this;
	}
	//重载后置++
	Complex operator++(int){	
		Complex temp;
		temp.mA = this->mA;
		temp.mB = this->mB;
		mA++;
		mB++;
		return temp;
	}
	//前置--
	Complex& operator--(){
		mA--;
		mB--;
		return *this;
	}
	//后置--
	Complex operator--(int){
		Complex temp;
		temp.mA = mA;
		temp.mB = mB;
		mA--;
		mB--;
		return temp;
	}
	void ShowComplex(){
		cout << "A:" << mA << " B:" << mB << endl;
	}
private:
	int mA;
	int mB;
};

void test(){
	Complex complex;
	complex++;
	cout << complex;
	++complex;
	cout << complex;

	Complex ret = complex++;
	cout << ret;
	cout << complex;

	cout << "------" << endl;
	ret--;
	--ret;
	cout << "ret:" << ret;
	complex--;
	--complex;
	cout << "complex:" << complex;
}
优先使用++和--的标准形式,优先调用前置++。
如果定义了++c,也要定义c++,递增操作符比较麻烦,因为他们都有前缀和后缀形式,而两种语义略有不同。重载operator++和operator--时应该模仿他们对应的内置操作符。
对于++和--而言,后置形式是先返回,然后对象++或者--,返回的是对象的原值。前置形式,对象先++或--,返回当前对象,返回的是新对象。其标准形式为:

调用代码时候,要优先使用前缀形式,除非确实需要后缀形式返回的原值,前缀和后缀形式语义上是等价的,输入工作量也相当,只是效率经常会略高一些,由于前缀形式少创建了一个临时对象。


2.视频内容

程序1:

#pragma warning(disable:4996)
//2022年10月5日19:53:09
#include <iostream>
using namespace std;

class Maker
{
public:
    Maker( int id )
    {
        this->id = id;
    }
    Maker operator-(Maker &m2)
    {
        Maker tmp(this->id - m2.id);
        return tmp;
    }
public:
    int id;
};

int operator-(Maker &m, int b)
{
    return m.id - b;
}
void test()
{
    Maker m1(10);
    Maker m2(5);
    Maker m3 = m1 - m2;
    cout << m3.id << endl;

    int a = m3 - 5;
    cout << a << endl;
}
int main()
{
    test();
    system( "pause" );
    return EXIT_SUCCESS;
}

输出结果:

5
0
请按任意键继续. . .

标签:mB,++,29,operator,id,运算符,--,减号,Maker
From: https://www.cnblogs.com/codemagiciant/p/16756406.html

相关文章

  • 二、运算符号和部分运算符号的优先级
    目录一、基本运算符号1、数学运算符号2、比较运算符号二、常用赋值符号1、链式赋值2、交叉赋值3、解压赋值三、逻辑运算符号1、and2、or3、not四、成员运算符号innotin五......
  • 04.运算符
    运算符用来对一个或多个值进行运算并返回运算结果。比如,+就是一个运算符,用来求两个数的和。leta=1+1,变量的a的值是2。算术运算符算术运算符用来完成算术运算,功能和......
  • 9.29题目大赏
    2022-9-29前两道真的很水,然而我写挂了QAQT1智力大冲浪简单得不能再简单的贪心。先将每个游戏按扣钱为第一关键字降序,时刻为第二关键字升序排列。因为我们希望无法完成......
  • C语言-运算符 sizof与strlen的区别
    1、sizeof是运算符,strlen是C语言标准库函数。2、 strlen 测量的是字符串的实际长度,以’\0’结束,返回结果不包括’\0’。3、而sizeof测量的是字符的分配大小,它的参数可......
  • 递增运算符的重载
    #include<iostream>usingnamespacestd;//重载递增运算符//自定义整形classMyIntrger{friendostream&operator<<(ostream&ocut,MyIntrgercout);public: MyIn......
  • 【笨方法学python】ex3 - 运算符
    代码如下:点击查看代码#-*-coding:utf-8--*-print"中文示例"#+plus加号#-minus减号#/slash÷#*asterisk×#%percent余数#<less-than小于#......
  • XX学Python·运算符的使用
    算数运算符加减乘除//取商%取余(取模)**幂次运算()小括号用来提高运算优先级float1=10.2int1=4int2=11#数值型数据(float,int,bool)间可以进行算数运算#......
  • 做题记录整理图论1 P3629 [APIO2010] 巡逻(2022/10/3)
    P3629[APIO2010]巡逻写一道题顶写三道题系列,为了写这道题专门去学习了树的直径的两种求法,可以说是血赚了https://www.luogu.com.cn/blog/lscsznmhw/solution-p3629......
  • Python 教程之控制流(7)Python中的链接比较运算符
    检查两个以上的条件在编程语言中很常见。假设我们要检查以下条件:a<b<c最常见的语法如下:ifa<band在Python中,有一种更好的方法可以使用比较运算符Chaining来编写它......
  • Python 教程之运算符(14)Python中==和is运算符的区别
    相等运算符(==)是Python中的比较运算符,用于比较两个操作数的值并检查值是否相等。而“ is”运算符是标识运算符,用于检查两个操作数是否引用同一个对象(存在于同一个内......