【问题标题】:How to declare operator/ overload function to operate on a const variable and a non-const variable?如何声明运算符/重载函数以对 const 变量和非 const 变量进行操作?
【发布时间】:2016-09-22 02:42:53
【问题描述】:

我有以下代码

#pragma once

#include "material.h"
#include "../Math/vector.h"
#include <cmath>

class LambertianMaterial : public Material
{
public:
    LambertianMaterial(Vector rho);
    Vector brdf(Vector wi) const
    {
        return mRho / M_PI; // Error here
    }

private:
    Vector mRho;
};

在与 brdf 的 return 语句对应的行中,我收到以下错误

Invalid operands to binary expression ('const Vector' and 'double')

在类向量中我已经声明了operator/

Vector operator/(const float a);

我正在考虑重新定义方法

friend Vector operator/(const Vector& v, const float& a);

这是一种好方法吗,还是有一种方法可以使操作员的当前定义解决const Vector 的情况?

【问题讨论】:

    标签: c++ operator-overloading constants


    【解决方案1】:

    如果它不会(也不应该)修改任何非静态成员变量,您可以将其设为 const 成员函数,该函数可应用于 const 和非 const 对象。

    Vector operator/(const float a) const;
    

    如您所想,将其设为非成员函数(并在必要时声明为友元)也可以完成这项工作。 IMO 我更喜欢operator/。请参阅Operator overloading : member function vs. non-member function? 了解更多信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-22
      • 2021-11-28
      • 1970-01-01
      • 2018-07-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多