函数重载是指可以创建多个具有相同名称但参数不同的函数。这用于提高可读性并确保直观的接口。
运算符重载是指定义标准运算符如何与用户定义的数据类型(类或结构)一起工作的能力。
运算符重载的限制:
.:,.*,::,sizeof,?:等)。加法运算符"+"的重载示例:
class Vector2D { public: float x, y; Vector2D(float _x, float _y): x(_x), y(_y) {} Vector2D operator+(const Vector2D& rhs) const { return Vector2D(x + rhs.x, y + rhs.y); } };
在C++中,是否允许重载逗号运算符(
,),如果可以,这可以用于什么?
回答:
是的,逗号运算符可以为用户定义的类重载。
然而,重载逗号运算符应在有充分意义的情况下进行,因为这可能会使代码阅读者感到困惑并导致意外后果。
struct Logger { Logger& operator,(const std::string& msg) { std::cout << msg; return *this; } };
故事
在一个数学库中,重载了==运算符用于比较对象,但忘记重载<运算符。这导致在尝试使用需要比较运算符的STL容器(例如std::set,std::map)时出现编译错误。
故事
开发者为Matrix类重载了+运算符,但总是修改左操作数而不是返回新对象。结果是出现了意想不到的副作用,违反了“操作的纯洁性”原则。
故事
在重载具有不同类型参数的函数时,没有考虑到const修饰符:void foo(SomeClass&); void foo(const SomeClass&);这导致函数调用歧义和传递临时对象时的编译错误。