1. 程式人生 > 其它 >C++運算子過載---加號運算子過載

C++運算子過載---加號運算子過載

技術標籤:C++面向物件

運算子過載概念:對已有的運算子重新定義,賦予其另一種功能,以適應不同的資料型別。
加號運算子過載
作用:實現兩個自定義資料型別相加的運算
實現兩個物件相加

其實你自己可以寫一個有這個作用的函式

//通過自己寫成員函式,實現兩個物件相加屬性後返回新物件
	Person PersonAddPerson(Person &p) {
		Person temp;
		temp.m_A = this->m_A + p.m_A;
		temp.m_B = this->m_B + p.m_B;
		return temp;
	}

直接呼叫這個函式也可以實現兩個物件相加

但用到過載之後,就可以直接簡化成這種寫法

Person p3 = p1 + p2;

1.通過成員函式過載

	//成員函式過載本質呼叫
	Person p3=p1.operator+(p2);
#include<iostream>
#include<string>
using namespace std;
class Person {
	//friend Person	operator+(Person &p1, Person &p2);
	friend void test01();
public:
	Person() {

	};
	Person(int a,
int b) { this->m_A = a; this->m_B = b; } //現在來看編譯器給的通用名稱:(通過成員函式過載+) 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; } private:int m_A; int m_B; }; //通過全域性函式過載 void test01() { Person p1(10,20); Person p2
(10,20); //成員函式過載本質呼叫 Person p3=p1.operator+(p2); cout << p3.m_A <<" "<< p3.m_B << endl; //可以簡化寫成 //Person p3 = p1 + p2; } int main() { test01(); return 0; }

在這裡插入圖片描述
2.全域性函式過載

//全域性函式過載本質呼叫
	Person p3=operator+(p1,p2);
#include<iostream>
#include<string>
using namespace std;
//通過全域性函式過載

class Person {
	friend Person	operator+(Person &p1, Person &p2);//變成友元函式來訪問類中的私有成員
	friend void test01();
public:
	Person() {

	};
	Person(int a, int b) {
		this->m_A = a;
		this->m_B = b;
	}

private:int m_A;
		int m_B;
	

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

void test01() {
	Person p1(10,20);
	Person p2(10,20);
	//全域性函式過載本質呼叫
	Person p3=operator+(p1,p2);
	cout << p3.m_A <<" "<< p3.m_B << endl;
	//可以簡化寫成
	//Person p3 = p1 + p2;

	
}

int main() {
	test01();
	return 0;
}


在這裡插入圖片描述
變形,物件+數

#include<iostream>
#include<string>
using namespace std;
//通過全域性函式過載

class Person {
	friend Person	operator+(Person &p1, int num);//變成友元函式來訪問類中的私有成員
	friend void test01();
public:
	Person() {

	};
	Person(int a, int b) {
		this->m_A = a;
		this->m_B = b;
	}

private:int m_A;
		int m_B;
	

};
Person	operator+(Person &p1, int num) {
	Person temp;
	temp.m_A = p1.m_A + num;
	temp.m_B = p1.m_B + num;
	return temp;
}

void test01() {
	Person p1(10,20);
	Person p2(10,20);
	//全域性函式過載本質呼叫
	Person p3=operator+(p1,100);
	cout << p3.m_A <<" "<< p3.m_B << endl;
	//可以簡化寫成
	//Person p3 = p1 +100;

	
}

int main() {
	test01();
	return 0;
}


在這裡插入圖片描述
總結:
對於內建的資料型別的表示式的運算子是不可能修改的
你不能改成1+1=0