对于运算符我们接触许多了+、-、=、+=、()、[]、new、delete、*、&等等运算符。在C++中除了其本身含义,我们还可以重载他们,对运算符进行重新设计。举个栗子。
struct Vector
{
float X ,Y;
Vector(float x,float y):X(x),Y(y){}
};
int main()
{
Vector speed(0.5f,1.5f);
Vector speedup(1.1f,1.1f);
}
我们创建结构体存储向量(struct默认公开更方便)vector初始化函数
在main我们要将speed与speedup相乘得到1.1倍的速度向量。显然只用“*”是做不到的,我们知道含义就是乘法,所以我们对其重载。先来看看正常怎么做乘法。
struct Vector
{
float X ,Y;
Vector(float x,float y):X(x),Y(y){}
Vector Multiply(const Verctor& other)const
{
return Vector (x * other.x,y * other.y)
}
};
int main()
{
Vector speed(0.5f,1.5f);
Vector speedup(1.1f,1.1f);
Vector result = speed.Multiply(speedup);
std::cin.get();
}
我们创建Multiply函数对其进行乘法。对于main来说符号一多就有点不容易看了,我们对其重载。
struct Vector
{
float X ,Y;
Vector(float x,float y):X(x),Y(y){}
Vector Multiply(const Verctor& other)const
{
return Vector (x * other.x,y * other.y)
}
Vector operator*(const Verctor& other)const
{
return Multiply(other);
}
};
int main()
{
Vector speed(0.5f,1.5f);
Vector speedup(1.1f,1.1f);
//Vector result = speed.Multiply(speedup);
Vector result = speed*speedup;
std::cin.get();
}
本质上依旧是引用Multiply函数,我们用operator对*重载。就可以在main函数里简化代码使其更有可读性。