加号重载
成员函数实现重载
#include <iostream>
using namespace std;
#include <string>;
class person {
public:
int m_a = 0, m_b = 0;
person operator+(person& p)
{
person tem;
tem.m_a = this->m_a + p.m_a;
tem.m_b =m_b + p.m_b;
return tem;
}
};
void test01()
{
person p1; p1.m_a = 10; p1.m_b = 20;
person p2; p2.m_a = 20; p2.m_b = 30;
person p3 = p1 + p2; //本质:person operator+(p2)
cout<<p3.m_a<< endl;
}
int main()
{
test01();
return 0;
}
全局函数实现重载
#include <iostream>
using namespace std;
#include <string>;
class person {
public:
int m_a = 0, m_b = 0;
};
person operator+(person& p1,person& p2)
{
person tem;
tem.m_a =p1.m_a + p2.m_a;
tem.m_b =p1.m_b + p2.m_b;
return tem;
}
void test01()
{
person p1; p1.m_a = 10; p1.m_b = 20;
person p2; p2.m_a = 20; p2.m_b = 30;
person p3 = p1 + p2; //本质:person operator+(p1,p2)
cout<<p3.m_a<< endl;
}
int main()
{
test01();
return 0;
}
说明:
第一个:创建了一个对象p,&p是p的引用,当执行p1+p2时,p1 被视为this指针,而p2则作为参 数 &p 传递给 Person operator+ (Person &p) 函数。
第一个传入一个参数:Person operator+是成员函数,它将当前对象和另一个对象相加。这个函数以一个参数 p 作为运算符+的右操作数,而左操作数是函数被调用的对象自身(*this)。
第二个传入两个参数:Person operator+是全局函数,它不依赖于特定的对象,它可以独立地操作两个 Person 对象
也可以函数重载
左移运算符重载
作用:可以输出自定义数据类型
通常不利用成员函数重载:p. operator<<( cout ) 简化为:p<<cout
无法使cout在左侧
解决方法2:解决测试函数中a和b的调用:在类中写一个构造函数,在构造函数中给变量赋值