1. 程式人生 > 其它 >C++中的純虛擬函式和抽象類

C++中的純虛擬函式和抽象類

技術標籤:程式語言

1.純虛擬函式是 一種特殊的虛擬函式,它的一般格式如下:

 class <類名>   {   virtual <型別><函式名>(<引數表>)=0;   …   };  

在許多情況下,在基類中不能對虛擬函式給出有意義的實現,而把它宣告為純虛擬函式,它的實現留給該基類的派生類去 做。這就是純虛擬函式的作用。純虛擬函式可以讓類先具有一個操作名稱,而沒有操作內容,讓派生類在繼承時再去具體地給出定義。

凡是含有純虛擬函式的類叫做抽象類。這種類不能宣告物件,只是作為基類為派生類服務。除非在派生類中完全實現基類中所有的的純虛擬函式,否則,派生類也變成了 抽象類,不能例項化物件。

2.聯編
聯編是指一個計算機程式自身彼此關聯的過程。按照聯編所進行的階段不同,可分為兩種不同的聯編方法:靜態聯編和動態聯編。
編譯程式在編譯階段並不能確切知道將要呼叫的函式,只有在程式執行時才能確定將要呼叫的函式,為此要確切知道該呼叫的函式,要求聯編工作要在程式執行時進行,這種在程式執行時進行聯編工作被稱為動態聯編,或稱動態束定,又叫晚期聯編。C++規定動態聯編是在虛擬函式的支援下實現的。
在C++中,要實現動態聯編,必須使用(基類指標)呼叫虛擬函式。

c++primer第六版:如果使用指向物件的引用或指標來呼叫虛方法,程式將使用為物件型別定義的方法,而不是使用為引用或指標型別定義的方法。這稱為動態聯編或晚期聯編。

這種行為非常重要,因為這樣基類指標或引用可以指向派生類物件。

在編譯時就確定的函式呼叫稱為靜態聯編,它通過使用函式過載,模板等實現。
在執行時才確定的函式呼叫稱為動態聯編,它通過虛擬函式來實現。

3.為什麼要用指標或引用來實現動態多型(Polymorphism)?

When virtual functions are used by reference or pointer, C + + correctly selects the redefined function in the derived class associated with the object. The running time polymorphism is realized. However, when virtual functions are used through objects, runtime polymorphism cannot be realized.