运算符重载
运算符重载概念: 对已有的运算符重新进行定义,赋予其另一种功能,以适应不同的数据类型.
加号运算符重载
作用: 实现两个自定义数据类型相加的运算
//对于内置数据类型,编译器知道如何进行运算
int a = 10;
int b = 10;
int c = a + b;
// 另一个场景 实现不了这种自定义运算
class Person
{
public :
int ma;
int mb;
}
Perosn p1;
p1.ma = 10 ;
p1.mb = 10;
Perosn p2;
p2.ma = 10;
p2.mb = 10;
Person p3 = p1 + p2;
通过自己写一个成员函数,实现两个对象相加后返回新的对象
Person Personaddperson(Person &p)
{
Perosn temp;
temp.ma = this->ma+this->ma;
temp.mb = this->mb+this->mb;
return temp;
}
//编译器起了一个通用的名称
//通过成员函数重载+号
Perosn operator+ (Perosn &p)
{
Perosn temp;
temp.ma = this->ma + this->ma;
temp.mb = this->mb + this->mb;
return temp;
}
Perosn p3 = p1.operator+ (p2)
简化为
Perosn p3 = p1 + p2;
//通过全局函数重载+
Perosn operator+ (Perosn &p1, Perosn &p2)
{
Perosn temp;
temp.ma = this->ma+this->ma;
temp.mb = this->mb+this->mb;
return temp;
}
Perosn p3 = p1.operator+ (p1 , p2)
简化为
Perosn p3 = p1 + p2;
内置的数据类型的表达式的运算符是不可能修改的
不要滥用运算符重载
左移运算符重载
作用: 可以输出自定义数据类型
class Person
{
public :
//利用成员函数重载 左移运算符 p.operator<< (cout) 简化版本p<< cout
//void operator << (cout)
void operator<< ()
{
}
int ma;
int mb;
};
//只能利用全局函数重载左移运算符
void operator<< (cout , )
void test01()
{
Perosn p;
p.ma = 10;
p.mb = 10;
cout << p << endl;
}
int main()
{
test01();
return 0;
}