C/C++ 运算符重载、数据类型转换
1.运算符就是“+”、“>>”等符号,对运算符重载实质就是对函数的重载,这样运算符就能在原有基础上增加新功能,不能自己定义新运算符,只能对已有运算符重载,重载运算符后不能改变运算符本身的特性,比如优先级,运算数个数等;
2.运算符重载格式:
函数类型 operator 运算符名称(形参表)
{
//具体操作
}
e.g.complex operator +(complex &c1,complex &c2)
operator是关键字,函数名由operator和运算符共同组成,如”operator +”。
3.不能重载的5个运算符:“.”、“*”、“::”、“sizeof”、“?:”。
4.对运算符重载的函数有两种方式:类成员函数、类友元函数。
类成员函数:complex operator +(complex &c1)
这样就可以直接c1+c2了,相当于是c1.operator+(c2),operator+就是c1的成员函数,因为可以通过this指针访问类的数据成员,所以可以少写一个函数参数,第一个参数必须为本类对象。
类友元函数:complex operator +(complex &c1,complex &c2)
这样c1+c2相当于是operator+(c1,c2)
如果不用友元,则重载的运算符函数无权访问类的私有成员,所以要用友元。
因为友元会破坏类的封装,所以尽量将运算符函数作为类的成员。一般来说,双目运算符为友元,单目和复合运算符为成员函数。
5.数据类型显式转换:
c风格:(int)12.3=12
c++风格:int(12.3)=12
6.构造函数转换数据类型,重载构造函数即可。
7.类型转换函数:
格式:operator 返回类型()//一般是在类内部写的,
{
//实现转换的语句
}
e.g.
class A
{
public:
int a;
A(int x) :a(x) {}
operator int()
{
return a;
}
};
int main()
{
A haha(2);
int b = haha + 3;
A c = haha + 4;
cout<<b<<"\n"<<c.a<<endl;
return 0;
//结果输出5和6
}
作用:将自定义数据类型转换为标准数据类型。