/**
* 書本:【thinkinginc++】
* 功能:純抽象類
*/#include using namespace std;
enum note ;
//建立乙個抽象類
//基類
class instrument
;//public繼承instrument
//派生類1
class wind : public instrument
};//不能定義為內聯
void pet::eat() const
virtual string name() const
virtual string speak() const };
class dog :public pet
//建立乙個新的虛函式
virtual string sit() const
string speak() const };
int main()
; cout<<"p[0]->speak() ="就是想上型別轉換,吧不同的地方都捨棄了,到最後得到和基類相同的屬性。
重新定義乙個基類中的過載函式將會隱藏所有該函式的其他基類版本
向下型別轉換必須顯示轉換,不能隱式轉換用
dynamic_cast<>
/*** 書本:【thinkinginc++】
* 功能:過載和重新定義
*//*
重新定義乙個基類中的過載函式將會隱藏所有該函式的其他基類版本
*/#include #include using namespace std;
class base
virtual void f(string) const
//乙個無關的函式
virtual void g() const ;
class pet //動物基類,同上
;class bird : public pet
class birdfood : public petfood
};//向上型別轉換
petfood* eats() //返回的型別是基類,return的是派生類的引用
private:
birdfood bf;
};class cat : public pet
class catfood : public petfood
};//明確寫出返回的型別
catfood* eats()
private:
catfood cf;
};int main()
; for(int i=0 ; i < sizeof(p)/sizeof(*p) ; ++i)
一般的純虛函式是不會有內聯的情況的,但是純虛擬析構函式可以內聯。
虛函式 ,子類可以不重寫,直接繼承父類 的方法來使用,也可以重寫
但是純虛函式是子類是必須重寫了才可以使用
定義他為虛函式是為了允許用基類的指標來呼叫子類的這個函式。
/**
* 書本:【thinkinginc++】
* 功能:判定純虛擬析構函式會被呼叫
*/#include using namespace std;
class pet
;//純虛函式必須得有函式體
pet::~pet()
;//純虛擬析構函式可以有內聯情況,一般的純虛函式不能內聯
inline object::~object() {}
class stack
}*head;
public:
stack() : head(0) {}
~stack()
}void push(object* dat) //加入資料
//彈出資料但是不在棧中刪除
object* peek() const
object* pop()
};#endif // ostack_h_included
/*** 書本:【thinkinginc++】
* 功能:關於單根繼承,實現stack的測試檔案
*/#include "ostack.h"
#include "../require.h" //前面的檔案給出了它的定義
#include #include #include using namespace std;
class mystring : public string, public object
{public:
~mystring() { cout<<"deleting string: "<<*this<
多型性和虛函式
11.27 多型指的是同樣的資訊被不同型別的物件接收導致不同的行為,包括 靜態多型性和動態多型性。靜態多型性包括 函式過載和運算子過載 動態多型主要 由虛函式實現。虛函式宣告 virsual 型別說明符 函式名 參數列 純虛函式 virtual 函式型別 函式名 參數列 0 在派生類中定義 抽象類 ...
多型性和虛函式
多型性是物件導向程式設計的乙個重要特徵。c 支援多型性,在 c 程式設計中能夠實現多型性。1 乙個典型的例子 先建立乙個 point 點 類,包含資料成員x,y 座標點 以他為基類,派生出乙個 circle 圓 類,增減資料成員 r 半徑 再以 circle 類為直接基類,派生出乙個 cylinde...
多型性和虛函式
1 向上型別轉換 取乙個物件的位址並將其作為基類的物件來使用 2 函式體和函式呼叫相聯絡稱為 遭 在程式執行之前 晚 在程式執行時 3 虛函式 為了引起晚 需要在基類使用vitual修飾函式 4 c 如何實現晚 vtable 編譯器放置特定的虛函式位址 在每個虛函式類中,編譯器秘密的放置乙個指標。指...