【面试题】用C模拟C++的多态特性
来源:互联网 发布:淘宝客转链工具 编辑:程序博客网 时间:2024/06/07 05:04
有以下两个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语言给出Base、Derived的定义,并实现两个类的创建代码。
===================================================================
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;
};
- 【面试题】用C模拟C++的多态特性
- 一道C的面试题
- c语言的面试题
- C/C++的面试题
- 用C语言模拟实现c++的继承与多态特性
- 【C语言】【面试题】【笔试题】模拟实现strstr函数
- 【C语言】【面试题】【笔试题】模拟实现strncmp
- 【C语言】【面试题】【笔试题】模拟实现strncpy
- 【面试题】C语言:模拟实现memcmp,试比较memcmp与strcmp,strncmp的区别
- 模拟试题C
- 从一道面试题分析c++的多态特性
- 【C++】面试题:模拟实现string类(版本一:用深度拷贝来实现 )
- [C/C++]各种面试题
- .C/C++/嵌入式面试题
- [C/C++]各种面试题
- [C/C++]各种面试题
- C++/C面试题集
- C语言面试题
- spring setter方法依赖注入(DI)原理
- C#中FTP上传下载
- tq2440 lcd 移植
- OpenLayers学习笔记二
- CSS实现背景图片不规则的导航菜单
- 【面试题】用C模拟C++的多态特性
- WPF里的DependencyProperty(2)
- 浏览器可以注册的事件
- 进程通信的五个种类
- 0040算法笔记——【分支限界法】批处理作业调度问题
- Spring mvc3的ajax
- php函数返回值
- java如何获取SQL查询结果集中的行数和列数
- hdu 1690 Bus System