いろきゅうの(元)はてなダイアリー

はてなダイアリーから移行中…

メンバ変数…じゃNeee!!

ひょんな事から __declspec キーワードについて調べていたんですが、その時にこんな構文がOKな事を知りました…

[Microsoft 独自拡張]

class A
{
  int n;

public:

  __declspec(property(get=Get, put=Set)) int Value;

  A() : n(0){}

  int Get() { return n; }
  int Set(int v) { return n = v; }

};

main()
{
  A a;
  a.Value   = 10;
  a.Value += 20;

  printf("n = %d\n", a.Value);      // n = 30
  printf("size = %d\n", sizeof(A)); // size = 4

  return 0;
}

[/Microsoft 独自拡張]

まるっきり C#/VB化しますな…こりゃ。(笑

しかし、C++に慣れてしまっている私としては、a.Value は単なる「メンバ変数」なわけで、そこに対して演算子を働かせるとメンバ関数が呼べてしまうっちゅーのは、結構違和感を感じてしまったり。
(なので、C#のプロパティ構文って言うのはイマイチ馴染めなかったクチです)

その割には、演算子の多重定義で operator = を定義したときの動作なんてのは、全く違和感なく扱えてしまうので、やっぱり「慣れ」の問題なんでしょーかねぇ。^^;