【面试题】用C模拟C++的多态特性

本文详细阐述了如何使用C++实现类继承及虚拟函数的机制,通过定义Base和Derived类,展示了如何利用虚拟函数表(Vtbl)来模拟C++的运行时多态性。同时,提供了构造函数实现的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

有以下两个C++类:

class Base {

public:

   Base(int a, int b) : m_a(a), m_b(b) {}

   virtual void Func1();

   virtual int Func2();

private:

   int m_a, m_b;

}

class Derived : public Base {

public:

   Derived(int a, int b, double d) : Base(a, b), m_d(d) {}

   virtual int Func2();

private:

   double m_d;

}

请模拟通常C++编译器的实现机制,用C语言给出BaseDerived的定义,并实现两个类的创建代码。

===================================================================

typedef void** VtblPtr; //意思凑合一下吧

struct base_t

{

   VtblPtr _vtbl;

   int m_a;

   int m_b;

};

struct derived_t

{

   VtblPtr _vtbl;

   int m_a;

   int m_b;

   double m_d;

};

new Base

base_t * pBase = malloc( sizeof(base_t) );

pBase -> _vtbl[0] = & _base_t_Func1;

pBase -> _vtbl[1] = & _base_t_Func2;

_base_t_Base( pBase, a, b ); //这句有点疑问,据说构造函数不需要this

new Derived

derived_t * pDerived = malloc(sizeof(derived_t) );

pDerived -> _vtbl[0] = &_base_t_Func1;

pDerived -> _vtbl[1] = &_derived_t_Func2;

derived_t的构造函数

void _derived_t_Derived( derived_t*pDerived, int a, int d)

{

   _base_t_Base( (base_t*)pDerived, a, b);

   pDerived -> m_d = d;

};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值