回答編集履歴
2
C++11版を追記
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
コンテナ型を質問内容に合わせて修正
answer
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
> どうすればAクラスのコンテナに代入した派生クラスのメソッドを呼び出せますか?
|
2
2
|
- クラスAに仮想関数または純粋仮想関数(`virtual`)を宣言しておき、派生クラスではこれをオーバーライドする必要があります。
|
3
|
-
- コンテナにはAクラスではなく(`
|
3
|
+
- コンテナにはAクラスではなく(`list<A>`)、Aクラスへのポインタ(`list<A*>`)を格納する必要があります。
|
4
4
|
|
5
5
|
```lang-cpp
|
6
6
|
class A{
|