程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> More Effective C++讀書筆記3

More Effective C++讀書筆記3

編輯:C++入門知識

Item 3: 不要對數組使用多態

        語言規范中說通過一個基類指針來刪除一個含有派生類對象的數組,結果將是不確定的。


[cpp]
01.class BST { ... }; 
02.class BalancedBST: public BST { ... }; 
03. 
04.void printBSTArray(ostream& s,const BST array[], int numElements) 
05.{ 
06.    for (int i = 0; i < numElements; ) 
07.    { 
08.        s << array[i]; //假設 BST 類重載了操作符<<  
09.    } 
10.}  
class BST { ... };
class BalancedBST: public BST { ... };

void printBSTArray(ostream& s,const BST array[], int numElements)
{
    for (int i = 0; i < numElements; )
    {
        s << array[i]; //假設 BST 類重載了操作符<<
    }
}


         編譯器原先已經假設數組中元素與 BST 對象的大小一致,但是現在數組中每一個對象大小卻與 BalancedBST 一致。派生類的長度通常都比基類要長。我們料想 BalancedBST 對象長度的比 BST 長。如果如此的話,printBSTArray 函數生成的指針算法將是錯誤的,沒有人知道如果用 BalancedBST 數組來執行 printBSTArray 函數將會發生什麼樣的後果。不論是什麼後果都是令人不愉快的。

 


        值得注意的是如果你不從一個具體類(concrete classes) (例如 BST)派生出另一個具體類(例如 BalancedBST),那麼你就不太可能犯這種使用多態性數組的錯誤。


 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved