將衍生自同一基類 (synObject) 的不同類別 (synPin, synCell) 指標存入 vector<synObject*>,遍歷時無法呼叫衍生類別專屬方法。
virtual,並提供虛擬解構函數。vector[i] 或迭代器解參考後取得基類指標,再以 dynamic_cast 轉為衍生類別指標呼叫專屬方法。vector<synObject*> MyVector;
MyVector.push_back(pMyObject);
MyVector.push_back(pMyPin);
MyVector.push_back(pMyCell);
for (size_t i = 0; i < MyVector.size(); ++i) {
cout << MyVector[i]->GetClass() << endl;
if (MyVector[i]->GetClass() == "synCell")
cout << dynamic_cast<synCell*>(MyVector[i])->GetCell() << endl;
if (MyVector[i]->GetClass() == "synPin")
cout << dynamic_cast<synPin*>(MyVector[i])->GetPin() << endl;
}
const string& 避免複製。delete 釋放 new 配置的物件。