深度探索C++对象模型1

深度探索C++对象模型【第三章1】 1:编译器会为每一个空class安插一个char,使得这个class的两个objects对象在内存中配置独一无二的内存地址。这就解释了空类的大小为何为1(即使该类为派生类,也需要为其安插一个char来区分其对象)。(传统意义上这个char会被放到class 的尾端) 2:class 的大小主要和以下三种因素相关: 虚拟机制带来的负担:一个指针,或是指向一个相关的vbtl,或是一个虚基类 阅读详情
 
读完这一章使我想到了一个很久以前看到的一个笑话,编写一个HELLO WORLD的程序,随着水平和职务的不一样,程序代码也随着变化。当初看时完全当作笑话来看,现在看来写此笑话的人水平不一般。如果要使你的代码能够最大限度的适应不同的运行环境,和最大限度的复用,则在设计和编写的过程中需要考虑的问题很多,因此代码已变的不在具有C语言的简洁,高效。而牺牲了这些优势换来的是更好的封装。当然如果你只是要打印Hello World则不必这样做了。

  以C++的思维方式解决问题,对于对C语言已经很熟悉的人来说会很不能适应。需要一段时间来适应,不然会将代码写的似是而非。而且不能邯郸学步,必须从思想上彻底的C++(OO),如果只是依葫芦画瓢,那结果很可能是用C++的语法编写C式的程序。本人曾经犯的典型的低级的错误之一,就是无意识的一个类无限制的扩充,完全没有考虑到类的多层结构(基类-派生类),需要属性或方法便在类中增加,虽然也用到了多态、重载等一些OO的设计方式,但最后这个类庞大无比,除了在当前系统中任劳任怨的工作外,一点复用的可能都没有,如果另一个系统还需要一个类似的东西,那只能重新设计实现一个新的类。并且最致命的是在维护更新时带来得麻烦,需要不断全部编译不说,而且代码在用了大量注释后,在过一段时间读起来也是一件重脑力劳动。及失去了C的简洁清晰和高效,也不完全具备C++的面向对象的特性。这根本不能叫C++程序。(我想有时间重写一下以前代码也会有很多收获,温故而知新吗)C和C++在编程思想上是相互矛盾的。这也就是说如果你想学C++,完全可以不学C,只需要一本好书和一个不太笨的大脑再加上努力就可以了,如果你已有C的经验在一定的情况下反而会捣乱。

  本章是对对象模型的一个大略浏览。既然我们选择了C++而不是C作为开发工具,那我们的编程思想也应该转为C++的,而不能再延续C的Procedural方式。我们必须学会C++的思考方式。采用抽象数据类型或用一个多层的class体系对数据以及数据处理函数进行封装,只有摆脱C程序的使用全局数据的惯性,才能充分发挥出C++对象模型的强大威力。

  在C++中有两种数据成员static和nonstatic,以及三种成员函数static、nonstatic和virtual。C++对象模型对内存空间和存取时间做了优化,nonstatic的数据成员被置于类对象之内,而static数据成员被置于类对象之外。static和nonstatic成员函数被放在类对象之外。而virtual函数是由类对象的一个指向vtbl(虚函数表)的指针vptr来进行支持。而vptr的设定和重置由类的构造函数、析构函数以及copy assignment运算符自动完成。

  我们设计的每一个类几乎都要有一个或多个构造函数、析构函数和一个Assignment运算符。他们的作用是构造函数产生一个新的对象并确定它被初始化。析构函数销毁一个对象并确定它已经被适当的清理(避免出现内存泄露的问题),Assignment运算符给对象一个新值。

  这是第一章的第一部分,由于雷神最近几天在做模式小组的主页,时间周转不开了。本想写完整个一章再发,考虑一下还是先发一部分吧。原因有2。1、第一章的后半部可能又要拖上10天半个月的。2、笔记实在难写,我不愿意将笔记做成将书上的重点再抄一边,而是喜欢尽量将自己的理解描述出来,谁知第一章便如此的难以消化,已经反复读了3遍,还是有些夹生。所以本着对大家和自己负责的态度,雷神准备再看它3遍在说。突然发现自己的C++还差的很远,好可怕呀。


二阶FLL辅助三阶PLL环路的代码解读 今天对GNSS接收机里面的载波跟踪环路代码进行了解读 以下是个人的一点见解 % 载波环第二步:环路滤波器 二阶FLL辅助三阶PLL环路 carrLoopS0 = lastCarrLoopS0 + (phaseErr*tau0PLL + freqErr*tau1FLL) * PDIcarr; carrLoopS1 = lastCarrLoopS1 + (tau1PLL*phaseErr + carrLoopS0 + tau2FLL*freqErr) * PD 阅读详情

相关推荐

VSCode+PlatformIO新建工程卡成狗?3步提速大法实测有效(附镜像源配置)

针对VSCode+PlatformIO新建工程时因依赖下载缓慢导致的加载慢问题,本文提供了三步核心提速方案。通过配置Python环境变量、修改PlatformIO插件设置以使用国内镜像源,并优化pip配置文件,实测可大幅缩短工程创建时间,有效解决创建工程卡顿的痛点。

delta的博客 712

C/C++ 常见编程技巧

一、const char* 和char* 之间的转换 const char*是指向常量的指针,而不是指针本身为常量,可以不被初始化.该指针可以指向常量也可以指向变量,只是从该指针的角度而言,它所指向的是常量,通过该指针不能修改它所指向的数据. 1.const char*是不能直接赋值到char*的,这样编译都不能通过,理由:假如可以的话,那么通过char*就可以修改const c...

weixin_34013044的博客 194

Cadence Allegro安装全攻略:从准备到优化的完整指南

本文提供了一份详尽的Cadence Allegro安装教程,涵盖从系统准备、硬件要求到获取安装文件的完整前期工作。指南逐步解析了自定义安装、路径选择及核心组件配置,并重点阐述了许可证服务器的环境变量设置与服务启动等关键激活步骤,最后给出了首次启动验证、个性化优化及常见问题排错方案,助您高效完成安装与配置。

weixin_29243063的博客 186

程序设计基础

程序设计基础内存分配与管理内存分配方式 由C/C++编译的程序占用的内存分为以下几个部分栈区(stack):由编译器自动分配释放,存放函数的参数值,局部变量等。其操作方式类似于数据结构中的栈。堆区(heap):一般由程序员分配释放(malloc/free、new/delete),若程序员不释放,程序结束时可能由操作系统回收。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。全局区(stat...

stt2019 1318

【实战指南】EC-Engineer中ESI配置与PDO Mapping全流程解析

本文详细解析了EC-Engineer中ESI配置与PDO Mapping的全流程操作,包括环境准备、ESI文件导入技巧、在线配置细节及故障处理。特别强调了WinPcap驱动的兼容性问题和PDO Mapping的最佳实践,帮助工程师高效完成EtherCAT总线配置,适用于工业自动化领域的伺服控制与运动协同场景。

weixin_28730927的博客 397

LAMMPS GCMC模拟保姆级教程:从fix gcmc命令到吸附等温线实战

本文提供LAMMPS GCMC模拟的详细教程,从fix gcmc命令设置到吸附等温线实战,涵盖巨正则蒙特卡洛模拟的全流程。通过MOF-5吸附甲烷的案例,指导用户构建模拟体系、转换化学势与压力、定义GCMC区域,并绘制出版级吸附等温线,助力材料科学研究。

weixin_33724046的博客 604

VS2017 CLR 编程无法调用方法或函数

本要在做项目的过程中,算法需要使用C++进行编写,但界面需要使用winform,开发环境为 VS 2017。在开发过程中,发现有些方法或函数已经定义了,但是在C#中进行调用时,函数列表中不存在该函数,如图所示:如图所示,虽然 Array函数已经在Utility 中进行了定义,但在 winform 中进行调用时,列表中不存在Array;经观察发现,因为 vector 是C++中的类型,而C#中不存在...

lingtianyulong的专栏 3330

手把手教你用THS4551搭建全差分放大器电路(附ADC驱动实战)

本文详细介绍了如何使用TI的THS4551全差分放大器搭建高性能ADC驱动电路,涵盖芯片选型、电路配置、PCB布局及实战调试等关键环节。THS4551凭借其优异的共模抑制比和宽电源电压范围,成为驱动16位及以上精度ADC的理想选择,特别适合工业应用场景。

weixin_30338481的博客 282

CreateThread, AfxBeginThread,_beginthread

CreateThread是Windows的API函数(SDK函数的标准形式,直截了当的创建方式,任何场合都可以使用),提供操作系统级别的创建线程的操作,且仅限于工作者线程。不调用MFC和RTL的函数时,可以用CreateThread,其它情况不要轻易。在使用的过程中要考虑到进程的同步与互斥的关系(防止死锁)。线程函数定义为:DWORD WINAPI _yourThreadFun(LPVOID pParameter)。但它没有考虑:(1)C Runtime中需要对多线程进行纪录和初始化,以保证C函数库工作正常

xust999的专栏 2183

车载机器人终极解决方案:从功能叠加到生态融合的颠覆性变革

本文提出一种融合智能汽车与家居技术的车载机器人架构。其创新点包括:1)基于多模态传感器的拟人化硬件设计,实现声源定位误差<5°、体温检测精度±0.3℃;2)跨模态情感计算引擎,综合面部表情、心率等数据构建三维情绪模型;3)协议自适应中间件,支持小米、华为等多品牌智能家居设备即插即用;4)环境自适应舵机控制,-30℃环境下扭矩保持率达92.5%。测试数据显示,该方案使交互步骤减少60%,用户满意度提升58%,日均使用时长增加2.3倍,为"人-车-家"生态融合提供了可行技术路径。

qq_42671193的博客 1125

面向干净核心的并行扩展:SAP BTP 上的 side-by-side extensions 全面解读

摘要: SAP的side-by-side extensions是一种与核心系统解耦的云原生扩展模式,通过API和事件驱动实现与SAP S/4HANA等核心系统的松耦合集成。该模式支持独立升级、弹性扩展和高效创新,是SAP官方推荐的clean core关键实现路径。其典型架构包括接口层(OData/REST API、事件通道)、运行层(Cloud Foundry/Kyma/CAP框架)和体验层(Fiori/UI5)。适用场景包括需快速迭代、复用云服务或服务外部用户的业务扩展。实施时需关注安全治理(如XSUAA

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 305

深度探索C++对象模型 第1章 关于对象

一、三、四章第1章 关于对象1.1 c++对象模型三.1 无继承下的C++对象模型**三.2 有继承下的C++对象模型****四 对象模型如何影响程序**1.2 关键词所带来的差异1.3 对象的差异欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章U

沟沟沟的博客 221

英飞凌 AURIX TC3XX 系列单片机的 NVM-Flash 介绍

简单介绍英飞凌 AURIX TC3XX 系列多核单片机的 Flash,便于快速上手使用

大橙子的博客 6640

深度探索C++对象模型 第1章

以下有三种数据类型(也还可以包含第四种模版化的数据类型)       从struct Point3d到class Point3d加上封装后的布局成本增加了多少? 答案是class Point3d并没有增加成本。 三个数据成员直接内含在每一个类对象之中,就像C struct的情况一样。成员函数虽然含在class的声明之中,但不出现在每个对象中。每个非内联成员函数只会诞生一个函数实体。

王者之殿 588

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

深度探索C++对象模型第1章 关于对象

一、何为C++对象模型? C++对象模型可以概括为以下2部分: 1. 语言中直接支持面向对象程序设计的部分 2. 对于各种支持的底层实现机制 语言中直接支持面向对象程序设计的部分,如构造函数、析构函数、虚函数、继承(单继承、多继承、虚继承)、多态等等第一部分这里我简单过一下,重点在底层实现机制。 在c语言中,“数据”和“处理数据的操作(函数)”是分开来声明的,也就是说,语言本身并没有支持“数据和函数”之间的关联性。在c++中,通过抽象数据类型(abstract data type,ADT),在类中定义数

LIJIWEI0611的博客 293

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

深度探索C++ 对象模型(1)-三种对象模型的设计

这里写自定义目录标题c++对象模型(1)类的成员Questions:虚函数表对象模型 c++对象模型(1) 类的成员 数据成员 . Static . Nonstatic 成员函数 . Static . Nonstatic . virtual Questions: C++封装带来的布局成本是多大? 由空类组成的继承层次中,每个类对象的大小是多大? 虚函数表 含有虚函数或其父类含有虚函数的类,编译器都会为其添加一个虚函数表vptr 每一个类为每一个virtual函数产生一个指针,放在表格中,这个表格就是虚

thefist的专栏 658

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

深度探索C++对象模型 1

第一章:关于对象   加上封装后的布局: 如果C++class和C struct含有相同数据成员,那么C++class并没有增加成本。因为,C++ class中的成员函数不出现在object中(non-inline 成员函数只会诞生一个实例,而inline函数则会在调用该C++ Class的文件模块中产生一个实例),所以C++支持的封装性质并未带来任何空间或执行期的不良后果。   C++

walkerkalr的专栏 1239

深度探索C++对象模型笔记 [1] 关于对象

本文主要基于Stanley.B.Lippman的《Inside the C++ Object Model》(侯捷译)而做的一些归纳(文字大多按照译文,进行了适当精简) 前言 在C中,“数据”和“处理数据的操作(函数)”是分开声明的,也就是说,语言本身并没有支持“数据和函数之间”的关联性。这种程序写法称作“程序性的(procedural)”,即所谓面向过程。 抽象数据...

Alfeim的博客 495

第1章读书笔记——深度探索c++对象模型

文章目录第1章 关于对象1.1 c++对象模式1.2**关键词带来的差异**1.3对象的差异 第1章 关于对象 1.1 c++对象模式 c++中有两种class data members: static和nonstatic,三种class member functions: static,nonstatic和virtual 对下面代码class point声明: class Point{ public: Point(float xval); virtual ~Point(); .

风源- 902

《深度探索C++对象模型》读书笔记1:引言,《深度探索C++对象模型》值得一读

《深度探索C++对象模型》为我们揭开了C++语言封装背后的技术细节,读完之后有一种“醍醐灌顶”的感觉。我想把自己的心得书写成文,一方面跟朋友们分享C++底层的奥秘,另一方面也是对C++的一次复习和总结。我会尽量用浅显的语言让朋友们在读完这系列文章之后,能够对《深度探索C++对象模型》有一个比较全面的认识。当然,如果您有什么不懂的地方也可以留言以交流。在这个系列的文章中,我会从一个初学者的角

宁静致远 1105

《深度探索C++对象模型》chapter1:关于对象

目录前言什么是C++对象模型?1 关于对象1.0 加上封装后的布局成本1.1 C++对象模式1.1.1 派生类如何模塑其基类实例?1.2 C++中的多态1.3 需要多少内存以表现一个class object?1.4 class的object布局和pointer布局1.5 OO与OB 前言 什么是C++对象模型? 语言中直接支持面向对象程序设计的部分 对于各种支持的底层实现机制 1 关于对象 1.0 加上封装后的布局成本 成员函数不占用类对象的内存空间 一个类对象至少占用1个字节的内存空间 成

weixin_42323999的博客 222

深度探索C++对象模型(1)

zzy5177的专栏 187

【深度探索C++对象模型】(1)关于对象

哎 再开新坑,希望19年能把开的这几个坑都填上。 class : 类 class object : 类对象 1.1 C++对象模型 简单来说,C++对象模型的实例的组成包括下面几个部分: Nonstatic data members与**virtual pointer(vptr)**储存在class object内 Static data members、Static functions mem...

RaKiRaKiRa的博客 289

《深度探索C++对象模型》1

C++对象模型: 多重继承模型示意: 第二章:构造函数 语意学 基类和派生类: Bear yogi; ZooAnimal franny=yogi; 在这里,很容易理解合成的copy构造函数将vptr指向基类的虚函数表,不然不仅造成数据切割(sliced),函数调用也混乱了。 返回值的初始化: 在下述四种情况下必须使用成员初始...

weixin_30687051的博客 84

深度探索c++对象模型(1):关于对象

一、简单对象模型 class Point { public: Point( float xval ); virtual ~Point(); float x() const; static int PointCount(); protected: virtual ostream& print( ostream &os ) const; float _x; static int _point_count;

ehuangdan5864的博客 137
上一篇: c++面向对象编程必备“良方”(欢迎大家来补充!)
下一篇: 深度探索C++对象模型2
雪岢奇
博客等级 码龄17年 310粉丝 60原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值