第三十五節 C++ 抽象基類和純虛函數

#include <iostream>
using namespace std;

/* 抽象基類:不能被實例化的基類。 它僅僅只有一個用途,用來派生出其他類。
 * 1. 要定義抽象基類,可使用純虛函數,純虛函數可當做接口使用
 * 2. 基類的純虛函數,在派生類中必須實現。 虛函數可以不用必須實現
 */

/*定義抽象基類*/
class BaseClass {
public:
	//虛函數=0,這個形式爲純虛函數, 告訴編譯器,必須在派生類中進行實現
	virtual void debugFun() = 0;  //可看成派生類的接口,調用此接口時,調用相應派生類的方法
};

/*實例化對象時,將創建兩個對象,子對象和基類對象,通過從調用的構造函數可以看出*/
class SonClass : public BaseClass {
public:
	void debugFun() { cout << "this is SonClass" << endl; } //若不實現此函數,編譯將會出錯
	SonClass() { cout << "SonClass constructor" << endl; }
	~SonClass() { cout << "~SonClass deconstructor" << endl; }
};

class Son2Class : public BaseClass {
public:
	void debugFun() { cout << "this is Son2Class" << endl; } //若不實現此函數,編譯將會出錯
	Son2Class() { cout << "Son2Class constructor" << endl; }
	~Son2Class() { cout << "~Son2Class deconstructor" << endl; }
};

void BaseInput(BaseClass& Base) {
	Base.debugFun();
}

int main()
{
	//BaseClass Base;  //去掉註釋,編譯出錯,抽象基類不可實例化對象。
	SonClass Son; //實例化對象
	Son2Class Son2; //實例化對象

	/*傳入哪個對象,調用哪個對象的方法*/
	BaseInput(Son); 
	BaseInput(Son2);

	return 0;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章