加号运算符重载
作用:实现两个自定义数据类型相加的运算
1.成员函数实现 + 号运算符重载
class Person { public: Person() {}; Person(int a, int b) { this->m_A = a; this->m_B = b; } //1.成员函数实现 + 号运算符重载 Person operator+(const Person& p) { Person temp; temp.m_A = this->m_A + p.m_A; temp.m_B = this->m_B + p.m_B; return temp; } public: int m_A; int m_B; }; void test() { Person p1(10, 10); Person p2(20, 20); //1.成员函数方式 Person p3 = p2 + p1; //相当于 p2.operaor+(p1) cout << "mA:" << p3.m_A << " mB:" << p3.m_B << endl; } int main() { test(); system("pause"); return 0; } 2.全局函数实现 + 号运算符重载 class Person { public: Person() {}; Person(int a, int b) { this->m_A = a; this->m_B = b; } public: int m_A; int m_B; }; //2.全局函数实现 + 号运算符重载 Person operator+(const Person& p1, const 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 test() { Person p1(10, 10); Person p2(20, 20); //2.全局函数方式 Person p3 = p2 + p1; //相当于 operaor+(p1,p2) cout << "mA:" << p3.m_A << " mB:" << p3.m_B << endl; } int main() { test(); system("pause"); return 0; }
3.运算符重载 可以发生函数重载
class Person { public: Person() {}; Person(int a, int b) { this->m_A = a; this->m_B = b; } public: int m_A; int m_B; }; //3.运算符重载 可以发生函数重载 Person operator+(const Person& p2, int val) //注意全局函数的运算重载的函数名是编译器给的。 { Person temp; temp.m_A = p2.m_A + val; temp.m_B = p2.m_B + val; return temp; } void test() { Person p1(10, 10); Person p2(20, 20); //3.运算符重载也可以发生函数重载,如下person + int Person p4 = p3 + 10; //相当于 operator+(p3,10) cout << "mA:" << p4.m_A << " mB:" << p4.m_B << endl; } int main() { test(); system("pause"); return 0; }
注意全局函数的运算重载的函数名是编译器给的。
总结1:对于内置的数据类型的表达式的的运算符是不可能改变的,即1+1=2不可变,不会为3.
总结2:不要滥用运算符重载,即你写的函数名是加法,可是函数的实现是减法,可以运行但是这叫滥用。