一定派生類可以說,我已實現了以下類如何循環基礎對象是
class A
{
public:
virtual void printA()
{
cout << "Hi from A!" << endl;
}
};
class B : public A
{
public:
virtual void printB()
{
cout << "Hi from B!" << endl;
}
};
class C : public B
{
public:
void printC()
{
cout << "Hi from C!" << endl;
}
};
讓我們也說我已經創建了一個std::vector<A *> vec
包含來自A,B實例化的對象的隨機量,和C.現在讓我說我被迫迭代所有對象vec
,但只調用具有printC()
方法的對象(即C
實例)。做這個的最好方式是什麼?
int main()
{
std::vector<A *> vec;
....
// insert random objects from both A, B and C into vec
....
for(vector<A *>::iterator x = vec.begin();
x != vec.end();
x++)
{
if(dynamic_cast<C *>(*x) != 0) // 1. is this OK?
(*x)->printC();
else
(*x)->printA(); // 2. is this also OK?
}
}
是1 OK?如果是的話,這是最佳做法?
也會導致在C的情況下的問題2?
也許這些都是愚蠢的問題,但我對C++很新,以及C++中多態性的工作原理對我來說很奇怪。由於
什麼是'我',我沒有看到它的定義。 – CoryKramer
這不會編譯。因爲'printC()'不是'A'的成員函數。舉一個更好的例子 – 101010
另外你必須使'print()'公開。 – 101010