私は以下の特定のシナリオを持っています。下のコードはBとCクラスの 'say()'関数を出力し、 'Bは..'と 'C says ...'を出力しますが、それはありません。すべてのアイデア.. 私も多相性を学んでいます下記のコード行に関連するいくつかの質問をコメントしました。多型オブジェクトのリスト
class A
{
public:
// A() {}
virtual void say() { std::cout << "Said IT ! " << std::endl; }
virtual ~A(); //why virtual destructor ?
};
void methodCall() // does it matters if the inherited class from A is in this method
{
class B : public A{
public:
// virtual ~B(); //significance of virtual destructor in 'child' class
virtual void say() { // does the overrided method also has to be have the keyword 'virtual'
cout << "B Sayssss.... " << endl;
}
};
class C : public A {
public:
//virtual ~C();
virtual void say() { cout << "C Says " << endl; }
};
list<A> listOfAs;
list<A>::iterator it;
# 1st scenario
B bObj;
C cObj;
A *aB = &bObj;
A *aC = &cObj;
# 2nd scenario
// A aA;
// B *Ba = &aA;
// C *Ca = &aA; // I am declaring the objects as in 1st scenario but how about 2nd scenario, is this suppose to work too?
listOfAs.insert(it,*aB);
listOfAs.insert(it,*aC);
for (it=listOfAs.begin(); it!=listOfAs.end(); it++)
{
cout << *it.say() << endl;
}
}
int main()
{
methodCall();
return 0;
}
実際には、*裸のポインタのコンテナを使用することは、パンドラのワープ・ネストですが、いくつでも問題が起こる可能性があります。 –
私は同意します。しかし、この場合は、裸のポインタを使用する方が適切であると考えて、そこで何が起こっているのかをよく理解するようにします。上記のシナリオで – LihO
私はまた私がそれを使用したらリスト要素の世話をする必要があります..私はそれか何かを削除する必要がありますか? – LivingThing