[過去ログ]
オブジェクト指向を教えてくれ!★2 (1002レス)
オブジェクト指向を教えてくれ!★2 http://mevius.5ch.net/test/read.cgi/tech/1619503348/
上
下
前次
1-
新
通常表示
512バイト分割
レス栞
抽出解除
必死チェッカー(本家)
(べ)
自ID
レス栞
あぼーん
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
420: 412 [] 2021/10/28(木) 18:30:46.65 ID:0bG2eCvc >>414 設計が悪いとは思うのですが具体的に何がおかしくてこうなっているのかよくわからないです… 具体例はこんな感じです namespace Model { class DataRecord { public: virtual ~DataRecord() {} //こっちにstd::string GetPrintfString()=0;みたいな関数を作るべき? //しかしデータによってどういう表示をするかはViewの方で選びたい }; class DataRecordString : public DataRecord { std::string value; public: DataRecordString(const std::string& value):value(value){} const std::string& GetValue()const { return value; } }; class DataRecordInt : public DataRecord { int value; public: DataRecordInt(int value):value(value){} int GetValue()const { return value; } }; class Model { std::vector<std::shared_ptr<DataRecord>> dataRecords; public: //TODO これだとvector自体はconstに出来てもvectorの要素は変更できてしまうのも問題… const std::vector<std::shared_ptr<DataRecord>>& GetDataRecords()const { return dataRecords; } }; } http://mevius.5ch.net/test/read.cgi/tech/1619503348/420
421: デフォルトの名無しさん [] 2021/10/28(木) 18:31:28.63 ID:0bG2eCvc >>420 続き class View { public: void DisplayModel(const Model::Model* pModel) { for (auto dataRecord : pModel->GetDataRecords()) { //ダウンキャストしないと中身がわからない if (const auto dataRecordString = dynamic_cast<Model::DataRecordString*>(dataRecord.get())) { printf("dataRecordString:%s", dataRecordString->GetValue().c_str()); } if (const auto dataRecordInt = dynamic_cast<Model::DataRecordInt*>(dataRecord.get())) { printf("dataRecordInt:%d", dataRecordInt->GetValue()); } } } }; http://mevius.5ch.net/test/read.cgi/tech/1619503348/421
メモ帳
(0/65535文字)
上
下
前次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.030s