小编mus*_*bob的帖子

c ++中的基本运算符重载语法

我很难形成一个我想问的问题,所以让我举个例子:

假设我们正在开发一个3d系统,我们已经定义了一个矢量类Vec3.我们重载一些算术运算符以获得明显的重复.其中我们重载*运算符,以便它返回两个向量的点积.现在我们的代码看起来像这样:

class Vec3{
private:
    float x, y, z;
public:
    float operator*(const Vec3&) const; //dot product
.
.
.
Run Code Online (Sandbox Code Playgroud)

现在说我们希望能够通过使用*运算符来扩展我们的向量,比如浮点数.这可以通过声明以下内容来完成:

    Vec3 operator*(const float) const;
    friend Vec3 operator*(const float, const Vec3&);
Run Code Online (Sandbox Code Playgroud)

这有两个重载,我想知道是否有办法只用一个,即我们声明这而不是上面两行:

    friend Vec3 operator*(const Vec3&, const Vec3&);
Run Code Online (Sandbox Code Playgroud)

然后为Vec3 ctor添加默认值以处理来自float的转换.

最后一个例子适用于:

    Vec3 someVec3 = 1.0 * otherVec3; //through friend Vec3 operator*(const float, const Vec3&)
Run Code Online (Sandbox Code Playgroud)

但不是为了这个:

    Vec3 someVec3 = otherVec3 * 1.0;
Run Code Online (Sandbox Code Playgroud)

因为编译器不知道要使用哪两个:

    friend Vec3 operator*(const float, const Vec3&); //the one we want to use
or
    float operator*(const Vec3&) const; …
Run Code Online (Sandbox Code Playgroud)

c++ operator-overloading operator-keyword

7
推荐指数
1
解决办法
3757
查看次数