c++的一大特性就是重载(overload),通过重载可以把功能相似的几个函数合为一个,使得程序更加简洁、高效。在c++中不止函数可以重载,运算符也可以重载。由于一般数据类型间的运算符没有重载的必要,所以运算符重载主要是面向对象之间的。
简单运算符重载的实力“:
class mainclass{
public:
mainclass(int a, int b)
{
this->a = a;
this->b = b;
}
void print()
{
cout <<a<<"+"<<b<<"i"<< endl;
}
public:
int a;
int b;
};
mainclass complex(mainclass & opp1, mainclass & opp2)
{
mainclass tem(opp1.a + opp2.a, opp1.b + opp2.b);
return tem;
}
int main()
{
mainclass opp3(1, 2);
mainclass opp4(3, 4);
mainclass opp5=complex(opp3, opp4);
opp5.print();
system("pause");
return 0;
}
上面mainclass opp5=complex(opp3,opp4);的调用方式与普通的显示调用没什么区别,还是与以往的函数调用一样复杂,为了简化这种复杂的调用机制,我们引入了运算符重载操作:
class mainclass{
public:
mainclass(int a, int b)
{
this->a = a;
this->b = b;
}
void print()
{
cout <<a<<"+"<<b<<"i"<< endl;
}
public:
int a;
int b;
};
#if 0
mainclass complex(mainclass & opp1, mainclass & opp2)
{
mainclass tem(opp1.a + opp2.a, opp1.b + opp2.b);
return tem;
}
#endif
mainclass operator+(mainclass & opp1, mainclass & opp2)
{
mainclass tem(opp1.a + opp2.a, opp1.b + opp2.b);
return tem;
}
int main()
{
mainclass opp3(1, 2);
mainclass opp4(3, 4);
#if 0
mainclass opp5=complex(opp3, opp4);
opp5.print();
#endif
mainclass opp6 = opp3 + opp4;
opp6.print();
system("pause");
return 0;
}
当编译器遇到对象+对象这种操作时会自动找到operator+这份函数中去执行相应的操作。