オブジェクト指向のプログラミングについてお聞きしたいです

[戻る]
はまち 2002/04/14(日) 14:50:06
2つの計算データm_data1,m_data2とその答えを記録するm_answerの3つのメンバ変数を
もったCDataクラスと、いろいろな計算方法を持っているCKeisanクラスの2つがあったと
します。どちらのクラスもドキュメントクラスにオブジェクトがあったとします。掛け算の答え
を求める関数を次のように作ったとします。

void CData::AnswerKakezan(CKeisan* pKeisan)
{
   m_answer = pKeisan->Kakezan(m_data1, m_data2);
}

CDataクラスのメンバオブジェクトとしてCKeisanクラスへのポインタをもたせるm_pKeisanを
作ってあらかじめ求めておけば、同じことが次のようにできると思います。

void CData::AnswerKakezan()   //引数がいらない
{
   m_answer = m_pKeisan->Kakezan(m_data1, m_data2);
}

みなさんは上の2つの方法のどちらをよく使っていますか。後者の方だと後で、割り算の答え、
足し算の答えを求める関数などが必要になったとき、実装する上でも、その関数を使う上でも
簡単な気がしました。僕自身も、今までは後者の方法をよく使っていたのですが、オブジェクト
を再利用したりするときでは、前者の方がわかりやすかったり、思い出しやすかったりするので
はないかとも感じました。

どんなことでも結構です。何かお気づきな点があれば教えてください。

2002/04/14(日) 20:50:49
そこらへんをおし進めていくとStrategyパターンになる。

よむべし。
http://www.amazon.co.jp/exec/obidos/ASIN/4797311126/yfcbookshelf-22/249-2475345-
5397967

はまち 2002/04/15(月) 00:51:33
あさん、お返事ありがとうございます。早速、本屋でチェックしてみます。

蟹飯 2002/04/15(月) 11:04:51
Kakezanをstaticにし

void CData::AnswerKakezan()   //引数がいらない
{
   m_answer = CKeisan::Kakezan(m_data1, m_data2);
}

がいいと思います。

はまち 2002/04/16(火) 23:46:20
[[解決]]
蟹飯さん、お返事ありがとうございました。
こういう風にもプログラムを書くことができるんですね。知りませんでした。本を調べながら
わかったのですが、静的メンバ関数という方法ですよね。こういった使い方もあるんですね。
勉強になりました。

あさんへ
 例の本を書店で見つけたので読んでみたのですが、僕には難易度が高く、まだまだ勉強
しなくてはと痛感しました。少しずつ、ゆっくりやっていこうかと思います。ありがとうござ
ました。

古いスレッドには追加発言できません。