【问题标题】:Overloading a C++ type to handle a custom class重载 C++ 类型以处理自定义类
【发布时间】:2016-01-30 03:40:18
【问题描述】:

目前只是搞乱重载类型并返回不同的东西,但是这个错误让我很困惑,我不知道如何用谷歌搜索它。

我的想法是,我有一个“2dvector”类,我想将点积返回为单个值,而不是向量形式。 例子: 浮动 dproduct = vec_a * vec_b;

我已经成功地将“*”重载为我班级的点积。尽管我对如何获取两个类感到困惑,但将点积作为单个值,并将其返回为不同的类型。

我现在的想法是这样的:

const float operator= (vec2& right);

const float vec2::operator= (vec2& right){
return (right.x + right.y);
}

由于 vec_a * vec_b 将返回“vec_c”结果,因此右侧应该正确评估。

【问题讨论】:

  • 点积不是标量数吗?你不是说你已经在两个向量上实现了'*'操作作为叉积,它返回一个向量。
  • 您不能重载类型。您可以重载函数,基于它们采用的参数类型。

标签: c++ class overloading


【解决方案1】:

对于vec_a * vec_b 部分,您需要一个operator*() 来计算两个vec2 对象的乘积并返回一个新的vec2,例如:

vec2 operator* (const vec2 &left, const vec2 &right)
{
    vec2 tmp;
    // fill with the product of left and right...
    return tmp;
}

对于float dproduct = ... 部分,您需要一个转换运算符将单个vec2 转换为数字:

class vec2
{
public:
    operator float () const;
};

vec2::operator float () const
{
    return (this.x + this.y);
}

IOW,这个声明:

float dproduct = vec_a * vec_b;

等同于这一系列调用:

float dproduct = ::operator*(vec_a, vec_b).operator float();

【讨论】:

  • 第二部分正是我所需要的。只是转换。非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-14
  • 1970-01-01
相关资源
最近更新 更多