NDK13_C++基礎:虛函數

NDK開發彙總

一 虛函數

增加程序的擴展性

class Parent {
public:
	 void test() {
		cout << "parent" << endl;
	}
};

class Child :public Parent {
public:
	void test() {
		cout << "child" << endl;
	}
};

Parent *c = new Child();
// 編譯期間 確定c 爲 parent 調用parent的test方法
c->test();

//修改Parent爲virtual 虛函數 動態鏈接,告訴編譯器不要靜態鏈接到該函數
virtual void test() {
		cout << "parent" << endl;
}
//動態多態 調用Child的test方法
c->test();

構造函數任何時候都不可以聲明爲虛函數

析構函數一般都是虛函數,釋放先執行子類再執行父類

二 虛函數引發的內存泄漏:

則在virtualFun函數中通過父類指針操作子類對象的成員函數的時候是沒有問題的,可是在銷燬對象內存的時候則只是執行了父類的析構函數,子類的析構函數卻沒有執行,這會導致內存泄漏

void zipFun() {

	//用父類的指針來出事話一個子類的對象
	Plane *jet = new Copter();
	//調用了子類中的虛函數
	jet->land();

	//回收
	delete jet;
	jet = nullptr;   //這種情況存在內存泄漏的可能
}

調用後打印:沒有走子類Copter的析構函數

Plane 無參構造函數00905A08灣流1991
Copter  無參構造函數灣流1991
Copter land
Plane 析構函數00905A08灣流1991
		

解決方法 將Plane 和Copter 的析構函數都聲明爲虛函數(.h聲明中加上virtual關鍵字)

三 純虛函數

//純虛函數
virtual void test() = 0;
  • 當一個類具有一個純虛函數,這個類就是抽象類
  • 抽象類不能實例化對象
  • 子類繼承抽象類,必須要實現純虛函數,如果沒有,子類也是抽象類
  • 一個類中只有純虛函數,那麼它是一個接口
  • 抽象類的作用:爲了繼承約束,根本不知道未來的實現
class Parent {
public:
    //純虛函數 繼承自這個類需要實現 抽象類型
	virtual void test() = 0;
};

class Child :public Parent {
public:
	void test(){}
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章