1

カスタムタイプを作成し、ドットセマンティクスを使用してそのメンバーにアクセスする何かを試すことに興味があります。例えば:

 Class A{ //simplified, omitting constructors and other methods
   private:
   float numbers[3];
   public:
   float x(){ return numbers[0]; }
   float y(){ return numbers[1]; }
   float z(){ return numbers[2]; }
  }

だから私はこのようなことができます:

  A a;
  //do stuff to populate `numbers`

  float x=a.x;

しかし、次のようなことができるように、要素をnumbers左辺値にすることもしたいと思います。

  A a;
  a.y=5; //assigns 5 to numbers[1]

この設定方法はどうすればいいですか?

4

3 に答える 3

1

初め。関数x、y、z を作成しましたが、それらを float に割り当てました。これはうまくいきません。2番。参照を返すようにこれらの関数を変更します。

class A{ //simplified, omitting constructors and other methods
   private:
   float numbers[3];
   public:
   float & x(){ return numbers[0]; }
   float & y(){ return numbers[1]; }
   float & z(){ return numbers[2]; }
};
...
A point;
float x = point.x();
point.x() = 42.0f;

別の方法があります: 参照をクラスのメンバーとして宣言し、c-tor で初期化します。

class A{ //simplified, omitting constructors and other methods
   private:
   float numbers[3];
   public:
   float & x;
   float & y;
   float & z;
   A() : x( numbers[ 0 ] ), y( numbers[ 1 ] ), z( numbers[ 2 ] ) {}
};
...
A point;
float x = point.x;
point.x = 42.0f;

PS @MikeSeymour を与えたコメントに注意してください

于 2013-05-14T09:56:05.907 に答える