10/05/20 20:56:53
class ToDO { virtual void doit() { printf("やったつもり"); };
class Ore1 : public ToDO { virtual void doit() { printf("明日になればやる"); };
class Ore2 : public ToDO { virtual void doit() { printf("やってるつもりだが何か?"); };
class Ore3 : public ToDO { virtual void doit() { printf("/(^o^)\"); };
Ore1 hoge;
Ore2 huga;
Ore3 hage;
ToDO* job_list[] = { &hoge, &hoge, &hoge, &hoge, &hage };
....
list[i]->doit();
993:デフォルトの名無しさん
10/05/20 21:15:10
>>985
機能が違うなら別の名前にするかな
一度日常にあるものでカテゴリー分けしてみるといいかもしれないね
親になるクラスを設計するときは、子になるクラスにおいて共通する機能を洗い出して実装するのだけど
>>986の例を借りれば
親:生物クラス ←生物とは鳴くものだ//関数の雛型だけ用意でもよい
子:犬クラス 一般的に「ワンワン」と鳴く
孫1:ヨークシャテリアクラス「バウバウ」と鳴く
孫2:柴犬クラス「アオーン」と鳴く
今回の例でいえば、子と孫の関係になるが
ヨークシャテリア(クラス)は鳴く(関数)→「バウバウ」
ヨークシャテリア(クラス)は(子:犬として)鳴く関数)→「ワンワン」
疑問に思っているように実装すると
ヨークシャテリア(クラス)は鳴く(関数)→「ワンワン」
ヨークシャテリア(クラス)はヨークシャテリアは鳴く(関数)→「バウバウ」
994:デフォルトの名無しさん
10/05/20 22:16:42
抽象化された命令をだして、実際の動作は各オブジェクトに任せる
つまり上司と下っ端の関係みたいなもんだよ
上司は何も知らなくてもやりたいことだけを言って
下っ端が必死こいて作業をこなしていく
995:デフォルトの名無しさん
10/05/20 22:55:25
例えばウィンドウを描くプログラムがあったとして、そのウィンドウに
いろいろな部品を簡単に追加できると便利だろう。
そこで、こんなクラスを作り、
class Item {
public:
Item();
virtual ~Item();
virtual void Draw();
...
};
class ListBox : public Window { public: virtual void Draw(){ リストボックスを描く } };
class Button : public Window { public: virtual void Draw(){ ボタンを描く } };
class Picture : public Window { public: virtual void Draw(){ 画像を描く } };
class Window {
public:
void AddItem(Item* pItem){ items.push_back(pItem); }
void Draw() {
for(int i = 0; i < items.size(); ++i){ items[i]->Draw(); }
}
private:
std::vector<Item*> items;
};
996:デフォルトの名無しさん
10/05/20 22:56:31
このように使う。
ListBox listBox;
Button yesButton, noButton;
Picture background;
Window window;
window.AddItem(&listBox);
window.AddItem(&yesButton);
window.AddItem(&noButton);
window.AddItem(&background);
window.Draw();
997:デフォルトの名無しさん
10/05/20 23:09:58
>>991
昔ならいざしらず、今は作ってるでしょう
998:デフォルトの名無しさん
10/05/21 07:16:08
++
999://
10/05/21 07:41:40
スレの住人喜べ
【初心者歓迎】C/C++室 Ver.73【環境依存OK】
スレリンク(tech板)l1
1000:デフォルトの名無しさん
10/05/21 07:43:51
1000なら>>999乙
1001:1001
Over 1000 Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。