C++的三种对象模型

1.介绍

        在C++中,对象模型是指C++编译器如何实现对象的布局、内存分配、成员函数调用等机制。C++的对象模型主要有三种,分别是:简单对象模型、表格驱动对象模型、C++对象模型。

2.简单对象模型

        (1)在这种模型中,对象仅包换数据成员,而成员函数则被当成普通函数处理,不存储在对象中。

        (2)每个对象只包含数据成员的指针,成员函数的调用通过函数指针表来实现。

        (3)这种模型简单,但效率较低,因为每次调用成员函数都需要通过函数指针表来查找。

        C++并没有采用这样一种对象模型,但被用到了C++中“指向成员的指针”概念中。

3.表格驱动对象模型

        (1)这种模型使用两个表格来管理对象:一个表格存储数据成员,另一个表格存储成员函数的指针。

        (2)对象本身只包含指向这两个表格的指针。

        (3)这种模型支持多态性、虚函数的调用通过虚函数表来实现。

        C++也没有采用这种对象模型,但却以此模型作为支持虚函数的方案。

4.C++对象模型

        (1)这是C++标准中实际使用的对象模型,结合了简单对象模型和表格驱动对象模型的特点。

        (2)对象包含数据成员和指向虚函数表的指针(如果有虚函数)。

        (3)非虚函数成员不存储在对象中,而是通过普通的函数调用机制来处理。

        (4)虚函数的调用通过虚函数表来实现,支持运行时多态。

        (5)这种模型在效率和灵活性之间取得了平衡。

5.C++对象模型的要点

  • 数据成员:存储在对象的内存布局中,每个对象都有自己的一份数据成员副本。

  • 成员函数:非虚成员函数不存储在对象中,而是通过普通的函数调用机制来处理。虚函数通过虚函数表(vtable)来实现多态。

  • 虚函数表(vtable):每个包含虚函数的类都有一个虚函数表,表中存储了指向虚函数的指针。对象中包含一个指向该表的指针(通常称为vptr)。

  • 继承和多态:通过虚函数表和vptr实现运行时多态。

如有错误,敬请指正!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值