C++多态

一,C实现多态

c_examp.c

/**
 * C实现多态
*/

#include<stdio.h>

/// 重定义一个函数指针类型
typedef void (*pf) (); // 指向参数为0, 返回值为void的函数

/**
 * @brief 父类
*/
typedef struct _A
{
    pf _f; // 定义一个函数指针对象
}A;

/**
 * 子类
*/

typedef struct _B
{
    A _b; ///< 在子类中定义一个基类的对象即可实现对父类的继承。
}B;

void FunA() 
{
    printf("%s\n", "Base A::fun()");
}

void FunB()
{
    printf("%s\n", "Derived B::fun()");
}

int main()
{
    A a;
    B b;

    a._f = FunA; // A的函数指针_f指向函数FunA()
    b._b._f = FunB; // B中的A的函数指针_f指向函数FunB()

    A *pa = &a; // pa指针指向对象a
    pa->_f(); // 调用对象a的函数指针_f
    pa = (A*)&b; /// 让父类指针指向子类的对象,由于类型不匹配所以要进行强转。
    pa->_f(); // 用父类指针指调用子类中的对象
    return 0;
}

二,c++中的多态

c++_examp.cpp

/**
 * c++中的多态
*/

#include<iostream>

using namespace std;
class A{
    public:
        virtual void f() // 虚函数实现
        {
            cout << "Base A::f() " << endl;
        }
};

class B : public A // 必须为公有继承,否则后面调不到,class默认为私有继承!
{
    public:
        virtual void f() // 虚函数实现,子类中virtual关键字可以没有
        {
            cout << "Derived B::f() " << endl; 
        }
};

int main() {
    A a; // 基类对象
    B b; //派生类对象

    A *pa = &a; // 父类指针指向父类对象
    pa->f(); // 调用父类的函数

    pa = &b; // 父类指针指向子类对象,多态实现
    pa->f(); // 调用派生类同名函数
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值