重载返回类型?

时间:2012-06-24 12:26:17

标签: c++

让我说我有一个班级

Class rofl {
 int a;
 float b;
 rofl::rofl(int a, float b) {
  this->a = a; this->b = b;
 }
}

可以吗

rofl* sup = new rofl(5, 2.0f);
float hello = sup;

这样变量hello会得到sup.b的值吗?

3 个答案:

答案 0 :(得分:8)

是的,您可以重载类型转换运算符

class Rofl {
public:
    operator float() const { return b; }

    ...
};

请参阅http://ideone.com/Y7UwV了解演示。

但是,请参阅Scott Meyers的More Effective C++第5项,标题为“警惕用户定义的转换操作”。允许从复杂类型进行隐式转换通常会导致各种微妙的拼写错误。

答案 1 :(得分:1)

你也可以走另一条路:

class rofl {
public:
    float operator=(float f) { b = f; return f; }

    ...
};

rofl sup(5, 2.0f);
sup = 4.0f;

demo,基于@Oli's answer

答案 2 :(得分:1)

不,如果你声明这是不可能的。在您的代码中,sup不是rofl而是rofl*,并且不允许创建rofl*float转化。此外,您的问题格式不正确:sup.b并未提及任何内容。

也就是说,您可能不需要动态分配实例,在这种情况下其他答案是正确的。