1

可以说我有课

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 的值吗?

4

3 回答 3

8

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

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

    ...
};

有关演示,请参阅http://ideone.com/Y7UwV 。

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

于 2012-06-24T12:28:31.777 回答
1

不,如果你说这是不可能的。在您的代码中,supis not a roflbut a ,并且不允许rofl*创建 a rofl*to转换。float此外,您的问题格式不正确:sup.b不涉及任何内容。

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

于 2012-06-24T14:34:40.753 回答
1

你也可以反过来:

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

    ...
};

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

demo,基于@Oli 的回答

于 2012-06-24T12:30:36.507 回答