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

いいえ、あなたが言った場合、これは不可能です。あなたのコードでは、はでsupはなく、roflであり、 to変換rofl*を作成することは許可されていません。さらに、あなたの質問は形式が正しくありません。何も言及していません。rofl*floatsup.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 に答える