程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> C++ Primer Plus學習筆記之虛函數

C++ Primer Plus學習筆記之虛函數

編輯:C++入門知識

C++ Primer Plus學習筆記之虛函數

C++語言的多態性有兩種類型:靜態多態性和動態多態性。函數重載和運算符重載就是靜態多態性的具體表現,而動態多態性是指程序運行過程中才動態的確定操作所針對的對象,它是通過虛函數實現的;

1,虛函數的概念:

一個指向基類的指針可用來指向從基類派生的任何對象,這樣就可以達到一個接口多個實現的訪問了;虛函數是在基類中被冠以virtual的成員函數,它提供了一種接口界面。虛函數可以在一個或者多個派生類中被重新定義,但要求在派生類中從新定義時,虛函數的函數原型,包括返回值,函數名,參數名,參數個數,參數類型的順序必須完全相同;

2,晚期匹配是怎麼發生的???

所有的工作由編譯器在幕後完成。為了完成這件事,編譯器對每個包含虛函數的類創建一個表成為VTABLE。在VTABLE中,編譯器放置特定類的虛函數地址。在每個帶有虛函數的類中,編譯器秘密的置一指針,成為VPTR指向這個對象的VTABLE。通過基類指針做虛函數調用時,編譯器靜態的插入取得這個VPTR,並在VTABLE表中查找函數地址的代碼。

3,虛特性:

用虛函數實現運行時多態性德關鍵之處是:必須使用指向基類的指針或引用訪問虛函數。

注意:

在派生類中重新定義基類的虛函數是函數重載的另一種特殊形式,它不屬於一般的函數重載。當重載一般函數時,僅要求函數名相同,但重載一個虛函數時,要求函數名,返回類型,參數個數,參數類型,參數順序完全相同,否則會導致虛特性丟失;

#include

using namespace std;

class figure
{
	public:
		void set(double i=0,double j=0)
		{
			x=i;
			y=j;
		}
		virtual void show_area()
		{
			cout<<"No area computation defined for this class"<set(10,5);
	f->show_area();
	f=&s;
	f->set(10,5);
	f->show_area();
	f=&c;
	f->set(10);
	f->show_area();

	return 0;
}
運行結果:

Triangle with high 10 and base 5 has an area of 25

Square with dimension 10*5 has an area of 50

Circle with radius 10 has an area of 314


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved