C++的三种对象模型

news/2025/2/27 3:06:53

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实现运行时多态。

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


http://www.niftyadmin.cn/n/5869408.html

相关文章

基于无人机遥感的烟株提取和计数研究

一.研究的背景、目的和意义 1.研究背景及意义 烟草作为我国重要的经济作物之一,其种植面积和产量的准确统计对于烟草产业的发展和管理至关重要。传统的人工烟株计数方法存在效率低、误差大、难以覆盖大面积烟田等问题,已无法满足现代烟草种植管理的需求…

django校园互助平台~源码

博主介绍:✌程序猿徐师兄、8年大厂程序员经历。全网粉丝15w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇…

算法-栈和队列篇05-前 K 个高频元素

前 K 个高频元素 力扣题目链接 题目描述 给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素。你可以按 任意顺序 返回答案。 解题思路 又是遇到折磨人的题目,思路还算清晰,就是不好写。对我来说,主要难…

MYSQL之相关子查询

MySQL 相关子查询详解 在 MySQL 中,子查询(Subquery)是指嵌套在另一个查询中的查询。子查询可以出现在 SELECT、INSERT、UPDATE、DELETE 语句中,也可以出现在 WHERE 或 HAVING 子句中。相关子查询(Correlated Subquer…

TCP/IP的分层结构、各层的典型协议,以及与ISO七层模型的差别

1. TCP/IP的分层结构 TCP/IP模型是一个四层模型,主要用于网络通信的设计和实现。它的分层结构如下: (1) 应用层(Application Layer) 功能:提供应用程序之间的通信服务,处理特定的应用细节。 典型协议&am…

网络原理--TCP的特性

TCP报文的结构: TCP的报头前20字节是固定长度,也可以通过“选项”来增加。 一、用来确保可靠性,最核心的机制,称为“确认应答” 引入一个情景: A向B询问cat和dog的意思: 这种情况是理想情况,…

【Azure 架构师学习笔记】- Azure Databricks (12) -- Medallion Architecture简介

本文属于【Azure 架构师学习笔记】系列。 本文属于【Azure Databricks】系列。 接上文 【Azure 架构师学习笔记】- Azure Databricks (11) – UC搭建 前言 使用ADB 或者数据湖,基本上绕不开一个架构“Medallion”, 它使得数据管理更为简单有效。ADB 通过…

Day28 第八章 贪心算法 part01

一. 学习文章及资料 理论基础 455.分发饼干 376.摆动序列 53.最大子序和 二. 学习内容 1. 理论基础 贪心算法无规律! 一般如想到局部最优,好像能推出全局最优,并且无明显反例,那就试一试! 2. 分发饼干 (1) 解题思…