AtCoder Beginner Contest 170 (D~F題,D篩法,E multiset使用,F Dijkstra演算法改進)
阿新 • • 發佈:2021-08-17
加號運算子過載
如果想讓自定義資料型別 進行+運算,那麼就需要過載 + 運算子
在成員函式 或者 全域性函式裡 重寫一個+運算子的函式
函式名 operator+ () {}
運算子過載 也可以提供多個版本
#define _CRT_SECURE_NO_WARNINGS #include <iostream> using namespace std; class Person { public: Person() {}; Person(int a, int b) :m_A(a), m_B(b) { } //Person operator+(Person& p)//成員函式過載加法運算子 二元 //{ // Person tmp; //需要提供預設的建構函式 // tmp.m_A = this->m_A + p.m_A; // tmp.m_B = this->m_B + p.m_B; // return tmp; //} int m_A; int m_B; }; //全域性函式過載+號運算子 二元 Person operator+(Person& p1, Person& p2) { Person tmp; tmp.m_A= p1.m_A + p2.m_A; tmp.m_B = p1.m_B + p2.m_B; return tmp; } //過載+號運算子多版本 即(過載過載+號運算子) Person operator+(Person& p1, int a) { Person tmp; tmp.m_A = p1.m_A + a; tmp.m_B = p1.m_B + a; return tmp; } void test() { Person p1(10, 10); Person p2(10, 10); Person p3 = p1 + p2; //p1+p2 從什麼表達是轉變? 成員 p1.operator(p2) 全域性 operator(p1,p2) cout << "p3.m_A:" << p3.m_A << "p3.m_B:" << p3.m_B << endl; Person p4 = p1 + 20; cout << "p4.m_A:" << p4.m_A << "p4.m_B:" << p4.m_B << endl; } int main() { test(); system("Pause"); //阻塞功能 return EXIT_SUCCESS; // 返回正常退出 }
結果: