C++ 純虛函數和抽象類
First:純虛函數
純虛函數是一個在基類中聲明的虛函數,
它在該基類中沒有定義具體的操作內容,
要求各派生類根據實際需要給出各自的定義。
純虛函數的格式:
virtual 類型 名稱(參數)=0;
實際上,它與一般的虛函數成員的原型在書寫格式上的不同就在于后面加了“=0”。
聲明純虛函數之后,基類中就可以不再給出函數的實現部分。
Second:抽象類
帶有純虛函數的類是抽象類。
抽象類的主要作用是通過它為一個類族建立一個公共的接口,使它們能夠更有效地
發揮多態自特性。
抽象類聲明了一個類族派生類的共同接口,而接口的完整實現,
即純虛函數的函數體,要由派生類自己定義。
抽象類不能實例化,即不能定義一個抽象類的對象,但是可以定義一個抽象類的指針
和引用。通過指針或者引用就可以指向并訪問派生類的對象,進而訪問派生類的成員,
這種訪問是具有 多態特征的。
下面來看一個例子。
View Code
#include "iostream" #include "cstring" #include "string" #include "cstdio" using namespace std; class base{ //這個就是純虛函數了,它為它的派生類base1和base2提供了一個公共的接口。 public: virtual void display() const=0; }; class base1:public base{ public: void display() const{ cout<<"I come from base1"<<endl; } }; class base2:public base1{ //這里寫base或者base1都是一樣的效果。 void display() const{ cout<<"I come from base2"<<endl; } }; void fun(base *ptr){ //抽象類不能實例化但是可以定義一個抽象類的指針和引用,來訪問派生類的對象,進而訪問派生類的成員 ptr->display(); } int main(){ //base Base; //這個是錯誤的,因為抽象類不能實例化 base1 Base1; base2 Base2; //fun(&Base); //這個地方也是錯誤的,指針和引用只能訪問派生類對象,進而訪問派生類成員 fun(&Base1); fun(&Base2); return 0; }
posted on 2012-04-22 13:14 More study needed. 閱讀(471) 評論(0) 收藏 舉報

浙公網安備 33010602011771號