用 C 语言实现 C++ 的 继承 和 多态

来源:互联网 发布:网络著作权侵权案件 编辑:程序博客网 时间:2024/06/10 01:33

用C++简单实现继承 && 多态(我用的是VS2013)

C++代码

#define _CRT_SECURE_NO_WARNINGS 1#include<iostream>using namespace std;//C++版template<class T>struct A{    virtual void F()    {        cout<<"A::F()"<<endl;    }    T a;};template <class T>struct B:public A<T>//B类 公有继承 A类{    virtual void F()    {        cout << "B::F()" << endl;    }    T b;};void testCPlusPlus(){    A<int> a;//创建父类的对象    B<int> b;//创建子类对象    A<int>* p;//创建父类的指针    p= &a;// 父类的指针指向父类对象    //形成的条件:1.父类与子类要形成函数的重写(虚函数的重写)2.父类的指针或引用指向父类或子类的对象    p->F();//调用的是父类的A::F()    p = (A<int>*)&b;// 父类的指针指向子类对象    p->F();//调用的是子类的B::F()}int main(){    testCPlusPlus();    system("plause");    return 0;}

C++结果

这里写图片描述

C语言模拟实现C++的 继承 与 多态

C语言代码

//C语言版typedef void(*FUNC)();//定义一个函数指针void FA(){    printf("A_::F()\n");}void FB(){    printf("B_::F()\n");}struct A_{    FUNC F;//创建函数名    int a_;};struct B_{    int b_;    A_ a;//在B_类创建A_类的对象相当于继承了A_类的所有成员};void testC(){    A_ a1;//创建A_类对象    B_ b1;//创建B_类对象    a1.F = FA; //(函数名就相当于一个原声指针)    b1.a.F = FB;    A_*p;//创建A_指针    p = &a1;//A_类指针指针指向A_类对象    p->F();//调用的是类似父类的A_::F()    p=(A_*)&b1;//A_类指针指针指向B_类对象    p->F();//调用的是类似子类的B_::F()}int main(){    //testCPlusPlus();    testC();    system("pause");    return 0;}

C语言结果

这里写图片描述

总结:

C语言也可以根据他的语法规则实现C++的继承与多态。

0 0
原创粉丝点击