fractal.tfract - TFEngine & T-Fract 開発室

フラクタルエンジンライブラリ TFEngine フラクタルジェネレータ T-Fract

#6: property に対する += 演算
Date: 2001/02/25 19:05:48 Sun Author: tos (tnet0004)
Child Article: #7: property に対する += 演算

C++Builder には他のコンパイラにはないユニークな言語仕様があります。
property もその一つです。

普通、private な変数をアクセスするには、setter, getter 関数を
public で用意しないといけませんが、そうすると単に値を設定、取得
するために

    Parameter->setWidth(640);
    w = Parameter->getWidth();

なんて面倒な事をしないといけませんよね。これが、C++Builder だと

    Parameter->Width = 640
    w = Parameter->Width;

と書くだけで、setter, getter の関数を呼んでくれるという、優れものな
機能です。

ここで、setter や getter 関数を用意しないと、デフォルトでは関数を
呼ぶ代わりに private な変数へも値を代入参照するようになります。


ここで、大きな落とし穴がありました。

setter には関数を用意して、getter は定義せず値を参照するのみとした
場合に、

    Parameter->Width += 10;

などとすると、どうやら setter が呼ばれない模様なのです。どうやって
いるかというと、おそらく 参照した変数に対して直接 10を足し込んで
いる模様です。

私はちゃんと setter を通して値を代入してくれるものと期待していたので、
この動作にかなり悩みました。 ^^;

結局、

    Parameter->Width = Parameter->Width + 10;

とすることで、問題は解決するのですが、何となく間抜けです。

そして、知らない人が += と書き換えた瞬間に、おそらく永久に判明する
ことのないバグに悩まされるのではないかと思いました。

これは、C++Builder の仕様なんでしょうか。バグなんでしょうか。ちょっと
アヤシい雰囲気があります。


tos.

■ この記事のコメントを書く

■ この書き込みを削除/復活します(投稿者のみ可)
■ この書き込み近辺の一覧表示へ

【最新20記事 [一覧] [ツリー] [一括] 】 【最新の記事は 15 番です.】
番から 番までの記事を
TFEngine & T-Fract 開発室 に新しい記事を

T-Net ■ メインページ