天天看點

模拟繼承和多态--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 ;
}
           

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

繼續閱讀