基類中過載運算子 <
有乙個專用來處理基類物件的函式;
如果對這個函式傳入的引數是單個物件,那麼通常情況下這個函式可以接收基類物件,也可以接收派生類物件,這是c++的多型特性決定的;
但是如果這個函式處理的是物件陣列,因為指標算數表示式的工作原理,這個函式只能用來處理基類物件陣列,雖然在函式形式上也可以接收派生類物件陣列,但是函式的處理結果是不可控的,因經過函式內部的指標運算後,指標指向的位址裡的內容是不可控的。
驗證函式如下:
#include//#include #include "baseclass.h"
#include "derivedclass.h"
void printbasearray(std::ostream& s,const baseclass array,int numelement);
void main()
void printbasearray(std::ostream &s, const baseclass array,int numelement)
}
驗證結果如下,通過觀察驗證結果,我們可以看到函式在處理基類物件陣列時候,輸出的結果如我們預想的一樣,但是在處理派生類物件陣列的時候,輸出的結果卻是與我們的期望相差很遠,除了array0的那一行輸出,這是因為這一步的時候函式還沒有對陣列指標進行操作。
其他檔案中的**如下
基類宣告
#ifndef baseclass_h
#define baseclass_h
#include#include class baseclass
;#endif
基類實現
#include "baseclass.h"
baseclass::baseclass()
baseclass::baseclass(int a,int b)
baseclass::~baseclass()
std::ostream &operator<
void baseclass::funcpri()
void baseclass::funcpub()
派生類宣告
#ifndef derivedclass_h
#define derivedclass_h
#include "baseclass.h"
class derivedclass : public baseclass
;#endif
派生類實現
#include "derivedclass.h"
derivedclass::derivedclass():baseclass()
derivedclass::derivedclass(int cd):baseclass()
derivedclass::derivedclass(int ad,int bd,int cd):baseclass(ad,bd)
derivedclass::~derivedclass()
void derivedclass::funcpri2()
不要用多型方式處理陣列以及陣列的析構
今天jackxu貼了一段 說有乙個奇怪的崩潰,希望一起看看,於是一研究了一下,如下,coredump崩潰的地方在delete,編譯器是gcc 4.1.2版本。同時在visual studio 上,這個沒有錯誤。崩潰前也沒有任何輸出。include class base class parent pu...
不要以多型方式處理陣列
class bst class balancebst public bst vvoid printbstarray ostream s,const bst array,int numelements for int i 0 i numelements i s編譯器必須能夠有能力決定陣列中物件的大小。...
不要對陣列使用多型
不要對陣列使用多型 類繼承的最重要的特性是你可以通過基類指標或引用來操作派生類。這樣的指標或引用具有行為的多型性,就好像它們同時具有多種形態。c 允許你通過基類指標和引用來操作派生類陣列。不過這根本就不是乙個特性,因為這樣的 幾乎從不如你所願地那樣執行。假設你有乙個類bst 比如是搜尋樹物件 和繼承...