模擬繼承和多型--C語言模式實現C++繼承和多型
阿新 • • 發佈:2019-01-05
C語言與C++語言的不同?
C語言是面向過程的語言。
C++語言是面向物件的語言。
面向過程:面向過程就是分析出解決問題所需要的步驟,然後用函式把這些步驟一步一步實現,使用的時候一個一個依次呼叫就可以了。
面向物件:面向物件是把構成問題事務分解成各個物件,建立物件的目的不是為了完成一個步驟,而是為了描敘某個事物在整個解決問題的步驟中的行為。
繼承與多型?
繼承:
繼承機制是面向物件程式設計使程式碼進行復用的最重要的手段,他允許程式設計師在保證類原有類特性的基礎上進行擴充套件來增加功能。這樣新產生的類就被稱為派生類,繼承就可以表現面向物件機制的的層次結構。
多型:
多型簡單點說就是“一個介面,多種實現”,就是同一種事物表現出的多種形態。多型在面嚮物件語言中是指:介面多種的不同實現方式。也就是複用相同介面,實現不同操作。
C++實現繼承和多型
class A
{
public:
virtual void fun()
{
cout << "base A::fun" << endl;
}
};
//B公有繼承A
class B :public A
{
public:
virtual void fun()
{
cout << "derived B::fun"<< endl;
}
};
int main()
{
A a;//基類物件
B b;//派生類物件
A* pa = &a;//父類指向父類物件
pa->fun();//呼叫父類fun函式
pa = &b;//父類指標指向子類物件
pa->fun();//呼叫子類fun函式
system("pause");
return 0;
}
用C語言模擬繼承和多型
//這裡注意 C語言中結構體不能互相呼叫 所以雖說是C語言模擬 其實還是.cpp結尾
//用一個函式指標
typedef void (*FUN)();
//父類
struct A
{
FUN fun;
};
//子類
struct B
{
A a;
};
void FunA()
{
printf("A::fun" );
}
void FunB()
{
printf("B::fun");
}
void Test()
{
A a;
B b;
a.fun = FunA;//父類物件呼叫父類函式
b.a.fun = FunB;//子類物件呼叫子類函式
A* a2 = &a;//定義一個父類指標指向父類物件
a2->fun();//呼叫父類的fun函式
a2 = (A*)&b;//父類指標指向子類物件(這裡要強轉)
a2->fun();//呼叫子類的fun函式
}