首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> VC >> 關於VC++

在 STL 列表中插入不同類型的物件

     編輯:關於VC++

問題描述

將衍生自同一基類 (synObject) 的不同類別 (synPin, synCell) 指標存入 vector<synObject*>,遍歷時無法呼叫衍生類別專屬方法。

解答

  1. 啟用動態繫結:基類方法需宣告 virtual,並提供虛擬解構函數。
  2. 使用基類指標/參考:透過指標呼叫虛擬函數,編譯器會依實際物件型別分派。
  3. 正確存取容器元素:建議使用 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 配置的物件。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved