zoukankan      html  css  js  c++  java
  • c语言模拟c++的继承和多态

    //C++中的继承与多态
    struct A
    {
        virtual void fun()    //C++中的多态:通过虚函数实现
        {
            cout << "A:fun()" << endl;
        }
    
        int a;
    };
    struct B :public A         //C++中的继承:B类公有继承A类
    {
        virtual void fun()    //C++中的多态:通过虚函数实现(子类的关键字virtual可加可不加)
        {
            cout << "B:fun()" << endl;
        }
    
        int b;
    };
    
    
    //C语言模拟C++的继承与多态
    typedef void(*FUN)();      //定义一个函数指针来实现对成员函数的继承,fun是一个函数指针,返回值为void,没有形参
    
    struct Baba       //父类
    {
        FUN fun;   //由于C语言中结构体不能包含函数,故只能用函数指针在外面实现
    
        int bb;
    };
    
    struct Erzi         //子类
    {
        Baba myfather;     //在子类中定义一个父类的对象即可实现对父类的继承
        int ee;
    };
    
    void fun_Baba()       //父类的同名函数
    {
        printf("Baba: fun()
    ");
    }
    void fun_Erzi()       //子类的同名函数
    {
        printf("Erzi: fun()
    ");
    }
    
    int main()
    {
        //测试C++中的继承与多态
        A a;    //定义一个父类对象a
        B b;    //定义一个子类对象b
    
        A* p1 = &a;   //定义一个父类指针指向父类的对象
        p1->fun();    //调用父类的同名函数
        p1 = &b;      //让父类指针指向子类的对象
        p1->fun();    //调用子类的同名函数
        cout << endl;
    
        //C语言模拟继承与多态的测试
        Baba baba;    //定义一个父类对象_a
        Erzi erzi;    //定义一个子类对象_b
        baba.fun = fun_Baba;        //父类的对象绑定父类的同名函数,对函数指针赋值可以不用&,也可以用
        erzi.myfather.fun = fun_Erzi;    //子类的对象绑定子类的同名函数
    
        Baba* p2 = &baba;   //定义一个父类指针指向父类的对象
        p2->fun();     //调用父类的同名函数
        p2 = (Baba*)&erzi;  //让父类指针指向子类的对象,由于类型不匹配所以要进行强转
        p2->fun();     //调用子类的同名函数
    
        return 0;
    }
  • 相关阅读:
    Java switch 枚举
    (八十七)AutoLayout的简单介绍与实例
    ptime概述
    如何让大数据从发现价值到创造价值
    什么是数据分析?数据分析的6个关键步骤!
    什么是数据分析?数据分析的6个关键步骤!
    数据分析方法汇总(2)
    数据分析方法汇总(2)
    数据分析方法汇总(1)
    人工智能能力提升指导总结
  • 原文地址:https://www.cnblogs.com/Joezzz/p/10440225.html
Copyright © 2011-2022 走看看