teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

C++11版を追記

2015/04/29 02:38

投稿

yohhoy
yohhoy

スコア6191

answer CHANGED
@@ -26,4 +26,22 @@
26
26
 
27
27
  // 最後にcontainter要素のdeleteが必要
28
28
  }
29
- ```
29
+ ```
30
+
31
+ ---
32
+
33
+ C++コンパイラがC++11に対応していれば、上記コードはもっと簡潔かつ安全に書くこともできます。
34
+ ```lang-cpp
35
+ int main(){
36
+ list<shared_ptr<A>> container;
37
+
38
+ container.push_back(make_shared<Derivation001>(...));
39
+ container.push_back(make_shared<Derivation002>(...));
40
+
41
+ for(auto p : container){
42
+ p->method();
43
+ }
44
+
45
+ // (containter要素のdeleteは自動的に行われる)
46
+ }
47
+ ```

1

コンテナ型を質問内容に合わせて修正

2015/04/29 02:38

投稿

yohhoy
yohhoy

スコア6191

answer CHANGED
@@ -1,6 +1,6 @@
1
1
  > どうすればAクラスのコンテナに代入した派生クラスのメソッドを呼び出せますか?
2
2
  - クラスAに仮想関数または純粋仮想関数(`virtual`)を宣言しておき、派生クラスではこれをオーバーライドする必要があります。
3
- - コンテナにはAクラスではなく(`vector<A>`)、Aクラスへのポインタ(`vector<A*>`)を格納する必要があります。
3
+ - コンテナにはAクラスではなく(`list<A>`)、Aクラスへのポインタ(`list<A*>`)を格納する必要があります。
4
4
 
5
5
  ```lang-cpp
6
6
  class A{