C++運算子過載---加號運算子過載
阿新 • • 發佈:2021-02-13
技術標籤: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