模擬繼承和多態--C語言模式實現C++繼承和多態

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函數
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章