Qt中C++运算符重载

1 背景

    在Qt中QPoint只支持二维的整型坐标,由于项目需要支持三维的浮点型坐标,因此我仿照QPoint自定义一个类QPoint3D,其中涉及到了运算符重载的问题。

2 重载方法

    参考资料[1]提到,C++中运算符重载有两种方式:成员函数友元函数。在Qt源码中,使用的是后者,下面是QPoint.h的部分代码:

friend Q_DECL_CONSTEXPR inline bool operator==(const QPoint &, const QPoint &);
friend Q_DECL_CONSTEXPR inline bool operator!=(const QPoint &, const QPoint &);
friend Q_DECL_CONSTEXPR inline const QPoint operator+(const QPoint &, const QPoint &);
friend Q_DECL_CONSTEXPR inline const QPoint operator-(const QPoint &, const QPoint &);

3 疑问

    友元的实现是不是要和类的定定义在同一个文件中才能使得重载运算符声明能够找到对应的实现呢?答案是否定的,友元函数可以在任意位置实现(其实QPoint.h中也只是声明了重载运算符而已,并没有相关实现)。

4 备注

    对于三维坐标点的表达,如果不想自定义QPoint3D的,可以使用QVector3D,其实它就是一个QPoint3D!

参考资料

[1]c++运算符重载总结

[2]C++中友元详解

你可能感兴趣的:(Qt中C++运算符重载)