虛擬函式
首先引出,我們的新知識點—虛擬函式(virtual function)
這是一種什麼函式呢? 簡單講,就是一個函式前面用virtual宣告的函式,一般形式如下:
virtual 函式返回值 函式名(形參)
{
函式體
}
那它有什麼用呢? 虛擬函式的出現,允許函式在呼叫時與函式體的聯絡在執行的時候才建立,即所謂的動態聯編。那麼在虛擬函式的派生類的執行時候,就可以在執行的時候根據動態聯編實現都是執行一個方法,卻出現不同結果的效果,就是所謂的多型。這樣解決上一節的問題就有了辦法。
接下來,我們只需要把基類中的area方法宣告為虛擬函式,那麼主函式中無論Point型別的指標還是引用就都可以大膽呼叫,無用關心型別問題了。因為他們會依據實際指向的物件型別來決定呼叫誰的方法,來實現動態聯編。
程式碼如下:
/********************************** //Des:C++教程demo //Author:Huang //Copyright:www.dotcpp.com //Date:2017/12/20 **********************************/
include
using namespace std;
define PI 3.1415926
class Point { private: int x,y;
public: Point(int x=0,int y=0) { this->x = x; this->y = y; } virtual double area() { return 0.0; } }; class Circle:public Point { private: int r; public: Circle(int x,int y,int R):Point(x,y) { r = R; } double area() { return PI*r*r; } };
int main() {
Point A(10,10);
cout<<A.area()<<endl;
Circle B(10,10,20);
cout<<B.area()<<endl;
Point *p;
p = &B;
cout<<p->area()<<endl;
Point &pp=B;
cout<<pp.area()<<endl;
return 0;
} 修改後編譯執行如下:
602.png
大家請自行上機實驗,體會虛擬函式及多型的作用。
需要注意的是:
虛擬函式不能是靜態成員函式,或友元函式,因為它們不屬於某個物件。
行內函數不能在執行中動態確定其位置,即使虛擬函式在類的內部定義,編譯時,仍將看作非內聯,
建構函式不能是虛擬函式,解構函式可以是虛擬函式,而且通常宣告為虛擬函式。
相關文章
- 虛擬函式,虛擬函式表函式
- 虛擬函式 純虛擬函式函式
- 介面、虛擬函式、純虛擬函式、抽象類函式抽象
- [Lang] 虛擬函式函式
- 【C++筆記】虛擬函式(從虛擬函式表來解析)C++筆記函式
- 【C++筆記】虛擬函式(從虛擬函式概念來解析)C++筆記函式
- c++虛擬函式表C++函式
- 虛擬函式與多型函式多型
- 虛擬函式的呼叫原理函式
- 虛擬函式的實現原理函式
- C++ 介面(純虛擬函式)C++函式
- C++ 虛擬函式表解析C++函式
- 深入C++成員函式及虛擬函式表C++函式
- C++多型之虛擬函式C++多型函式
- 抽象基類和純虛擬函式抽象函式
- 內聯(inline)函式與虛擬函式(virtual)的討論inline函式
- C++虛擬函式學習總結C++函式
- C++之類解構函式為什麼是虛擬函式C++函式
- 基類指標、虛純虛擬函式、多型性、虛析構指標函式多型
- C++建構函式和解構函式呼叫虛擬函式時使用靜態聯編C++函式
- 虛擬函式的記憶體佈局(上)函式記憶體
- 關於虛擬函式的一些理解函式
- C++ 派生類函式過載與虛擬函式繼承詳解C++函式繼承
- Java常見知識點彙總(④)——虛擬函式、抽象函式、抽象類、介面Java函式抽象
- C++純虛擬函式簡介及區別C++函式
- c++虛擬函式實現計算表示式子C++函式
- C++物件導向總結——虛指標與虛擬函式表C++物件指標函式
- setV:一個管理 Python 虛擬環境的 Bash 函式Python函式
- 詳解C++中的多型和虛擬函式C++多型函式
- 虛擬函式表-C++多型的實現原理函式C++多型
- 避免對派生的非虛擬函式進行重定義函式
- C++(虛擬函式實現多型基本原理)C++函式多型
- __cxa_pure_virtual報錯(g++編譯虛擬函式時)編譯函式
- 基類指標,子類指標,虛擬函式,override與final指標函式IDE
- 021--C++養成之路(純虛擬函式和純抽象類)C++函式抽象
- pytorch擬合sin函式PyTorch函式
- C++單繼承、多繼承情況下的虛擬函式表分析C++繼承函式
- <<從0到1學C++>> 第7篇 多型性和虛擬函式C++多型函式
- strlen函式的模擬實現函式