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函數
}