TFEngine & T-Fract 開発室 の 6 番の書き込みへコメントを付けます.
ボード:
T-Net - 管理人室
フリートーク - フリートーク MainStream
音楽 - 音楽 MainStream
コンピュータ音楽 - コンピュータ音楽 MainStream
コンピュータ音楽 - MIDI
コンピュータ音楽 - DTM おすすめリンク集
コンピュータ音楽 - 音楽理論・作曲技術
コンピュータ音楽 - 習作 発表会
コンピュータ音楽 - オリジナル音楽 発表会
コンピュータ音楽 - 既存曲の研究
フラクタル・Math Art - フラクタル・Math Art MainStream
フラクタル・Math Art - TFEngine & T-Fract 開発室
コンピュータ - コンピュータ MainStream
コンピュータ - プログラミングのお話
コンピュータ - UNIX
コンピュータ - インターネット
ゲーム - ゲーム MainStream
ゲーム - PlayStation
ゲーム - PlayStation2
ハンドル(名前):
(guest)
Subject:
書き込み:(1行は折り返さないように30文字程度で改行してください。)
> 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.
■ メインページ