1. 程式人生 > >C語言模擬C++多型

C語言模擬C++多型

typedef void(*FUN)();//重定義一個函式指標型別


struct Base
{
	FUN f;//由於C語言中結構體不能包含函式 只能用函式指標在外面實現
};

struct Derive//本派生類只繼承了父類 他自己沒有自己的部分
{
	Base b;//在子類中定義一個基類的物件即可實現對父類的繼承
};

void FunB()
{
	printf("%s\n","Base::FunB()");
}

void FunD()
{
	printf("%s\n","Derive::FunD()");
}

void show()
{
	Base b;//定義一個父類的物件
	Derive d;//定義一個派生類的物件

	b.f = FunB;//父類的物件呼叫父類的同名函式
	d.b.f = FunD;//子類的物件呼叫子類的同名函式

	Base *pb = &b;//父類的指標指向父類的物件
	pb->f();//父類指標呼叫父類的同名函式

	pb = (Base*)&d;//父類指標指向子類物件 由於型別不匹配所以要強轉
	pb->f();//呼叫子類的同名函式
}
int main()
{
	show();//Base::FunB()  Derive::FunD()
	return 0;
}