深入探索C++对象模型 之 关于对象(Object Lessons)

使用eclipse,搭建spring boot 开发环境,并写一个helloworld小网页 这里写使用eclipse,搭建spring boot 开发环境,并写一个helloworld小网页目录标题环境搭建jdk安装eclipse安装spring插件开始搭建项目新建springboot项目运行项目参考 环境搭建 jdk 在使用eclipse之前,需要安装配置 jdk,可以参考 jdk安装教程 安装eclipse eclipse可用于开发多种语言的项目,选择Eclipse IDE for Java EE Developers版本下载. 这里是官方的java ee的地址:https://www.ec 阅读详情

2004年12月4日11:34:42

众所周知c++是一个多范性的语言。包括:过程性的,抽象数据类型(ADT,Object-Based),面向对象的(Object-Oriented)。所谓过程性的程序设计方法就是传统的c程序的设计方法:数据和处理数据的操作是分开来声明的。而Object-Based的程序设计方法把数据和操作封装在一起(如String class),他不支持类的扩充,也就没有多态形式。但是OB设计比一个对等的OO设计速度更快而且空间更紧凑。面向对象的程序设计认为万事万物都是对象,支持继承,封装和多态特性。对象之间的关系是设计的重点和难点,要做到低耦合,易扩展,易维护。最后C++还支持Generic Program,类型可以参数化,数量也可以参数化,而这是C++的最高境界和发展前景。

从C过度到C++时的内存布局成本并没有显著的增加。
一个class object需要的内存包括以下三部分:
1.其nonstatic data members的总和大小;
2.加上任何由于alignment(边界调整)的需求而填补上去的空间;
3.加上为了支持virtual而由内部产生的任何额外负担。
C++在布局以及存取时间上的主要的额外负担是有virtual引起的,包括:
1.virtual function机制--用以支持一个有效率的“执行期绑定”。
2.virtual base class--用以实现“多次出现在继承体系中的base class,有一个单一而被共享的实体”。
(virtual就是共享的意思)

C++的对象模型:
在此模型中,Nonstatic data members 被配置于一个class object 之内,static data members 则被存放在所有的class object 之外,Static 和 nonstatic function members 也被放在所有的class object 之外。
Virtual functions 则以两个步骤支持:

1.  每一个class产生出一堆指向virtual functions 的指针,放在表格之中,这个表格被称为virtual table (vtbl)。

2. 每一个class object 被添加了一个指针,指向相关的virtual table。通常这个指针被称为vptr。vptr的设定和重置都由每一个class的constructor,destructor 和 copy assignment 运算符自动完成。每一个class所关联的type_info object (用以支持 runtime type identification, RTTI)也经由virtual table 被指出来,通常是防在表格的第一个slot处。


加上继承:
C++支持单一继承和多重继承。继承关系也可以指定为虚拟的,在虚拟继承的情况下,base class 不管在继承串链中被派生了多少次,永远只会存在一个实体。一个 derived class如何在本质上摸塑其base class的实体呢?一般是采用一种类似virtual table的base table模型,base class table 被产生出来时,表格中的每一个slot内含一个相关的base class 地址,每个class object 内含一个bptr,他会被初始化,指向其base class table。这种策略的主要缺点是由于间接性而导致的空间和存取时间上的额外负担,优点则是在每一个class object 中对于继承都有一致的表现方式:每一个class object 都应该在某个固定位置上安放一个base table 指针,与 base classes 的大小和数目无关。第二个优点是,不需要改变 class objects 本身,就可以放大,缩小,或更改base class table。

C++中保留关键词struct只是为了让C程序员和现存的C程序可以更容易的过度到C++。另外struct和class在C++中没有本质区别。可以用class的地方都可以用struct。C struct在C++中的一个合理用途,是当你要传递“一个复杂的class object的全部或部分”到某个C函数中去时,struct声明可以将数据封装起来,并保证拥有与C兼容的空间布局。然而这项保证只在组合的情况下存在。

C++以下列方法支持多态:

1. 经由一组隐含的转化操作。
  
例如把一个derived class指针转化为一个指向其public base type 的指 针:shape *ps = new     circle ();
2.
经由virtual function 机制:ps->rotate();
3.
经由 dynamic_cast 和typeid
运算符:
if (circle *pc =dynamic_cast<circle*>(ps))...   

 

多态的主要用途是经由一个共同的接口来影响类型的封装,这个借口通常被定义在一个抽象的base class中。这个共享接口是以virtual function 机制引发的。
C++经由pointer 或referenece来支持多态:
         Bear b;ZooAnimal *pz=&b;bear *pb=&b;
除了ZooAnimal subobject中出现的members,你不能够使用pz来直接处理Bear的任何members。
//错误,cell_block不是ZooAnimal的一个member,虽然我们知道pz当前指向一个Bear object。
                    pz->cell_block;
唯一例外是通过virtual机制:
                    pz->rotata();
pz的类型将在编译时期决定以下两点:
1.固定的可用接口。也就是说,pz只能够调用ZooAnimal的public接口;
2.该接口的access level。
在每一个执行点,pz所指的object类型可以决定rotate()所调用的实体。类型信息的封装维护于“object的vptr”和“vptr所指之virtual table”之间。

看看下面这种情况:
Bear b;
ZooAnimal za=b;//将会引起切割(sliced)
za.rotate();//调用的是ZooAnimal::rotate()
 多态所造成的“一个以上的类型”的潜在力量,并不能够实际发挥在“直接存取objects”这件事情上。
一个pointer或reference之所以支持多态,是因为它们并不引发内存中任何“与类型有关的内存委托操作”;会受到改变的只是它们所指向的内存的“大小和内容解释方式”而已。

 

提升Web开发效率:Eclipse中的HTML/CSS/JSP/XML提示插件 Eclipse 是一个流行的开源集成开发环境(IDE),最初由IBM在2001年发布,目前由Eclipse基金会维护。它以其强大的插件生态系统和模块化设计而闻名,尤其在Java开发者社区中占有一席之地。Eclipse 支持多种编程语言,包括但不限于 Java、C/C++、PHP 和 Python。在本章中,我们将探讨 Eclipse 的基本功能和在Web开发中的重要性。超文本标记语言(HTML)是构建网页的标准标记语言,它定义了网页内容的结构。 阅读详情

相关推荐

ArcMap实战:用栅格计算器搞定16年NDVI趋势分析,附完整F检验流程

本文详细介绍了如何使用ArcMap的栅格计算器进行16年NDVI趋势分析,包括数据预处理、线性趋势计算和F显著性检验的全流程操作。通过实际案例和统计原理解析,帮助GIS从业者掌握植被覆盖变化的分析方法,特别适合生态评估和农业监测应用。

weixin_29251567的博客 252

Eclipse插件介绍的网页

http://lonelonglong.bokee.com/1912097.html http://beauty9235.iteye.com/blog/50918 http://java.ccidnet.com/art/12019/20080107/1332685_1.html http://www.learnjava.cn/opensource/open04/Index.html   http:...

an囧 145

台达伺服B3驱动器参数的设定和CN1的接法

3. B2的电子齿轮比是直接设定P1-44(分子)和P1-45(分母)就就可以的,但是B3的有个隐藏的细节,就是P1-44的默认值77216不用去更改,这是官方客服说的,需要改的是P1-45这个参数,比如说,我使用的丝杆螺距是5mm的,那么就是以5000脉冲走完5mm为一圈,则就把P1-45设定为5000即可;我的是三菱FX3S系列的PLC,是NPN型的,输出点是24V-作为信号的,所以接41、37,具体可参考B3的。,跟着客服的讲解操作才解决的,以下就是解决方法,希望能够帮到需要的各位。

qq_38681017的博客 1万+

Eclipse 插件开发心得小结

1、Eclipse 中插件开发多语言的实现 为了使用 .properties 文件,需要在 META-INF/MANIFEST.MF 文件中定义:       Bundle-Localization: plugin 这样就会自动加载 plugin.properties 文件(中文找 plugin_zh_CN.properties) 然后在 plugin.xml 文件中,将字符串替换为 %k

蜡笔小辛的专栏 5892

Mac OS X 工具技巧:一文搞定个性化命令行窗口(iTerm2 + zsh + oh-my-zsh 配置Powerline风格)

本不想写这篇文章的,因为在Linux下已经配置过很多次,想着mac应该找篇文章一次就搞定了,结果还是踩坑,看了很多文章,不是某一点没不清楚,就是截图有问题或者命令有问题,官网又难得找等等……花了3个多小时才搞定,所以,还是来总结一篇文章就能够搞定的教程。 为什么要用zsh?用了这么多年的bash,不能说bash不好,不过当我用了zsh后发现,什么叫更好用。 配置过程稍微有点繁琐,但是你看过效果...

mickjoust的技术小屋 1万+

从时序博弈到数据稳定:CS1237驱动中的信号滤波与卡尔曼实践

本文探讨了CS1237高精度ADC驱动在复杂工业环境中的信号处理挑战,重点介绍了一阶滤波与自适应卡尔曼滤波算法的实践应用。通过参数优化和动态调整策略,有效提升了数据稳定性和抗干扰能力,为嵌入式系统在噪声环境下的精密测量提供了可靠解决方案。

rnn9storyteller的博客 866

工程师 - Eclipse安装和UML插件

打开或新建一个Eclipse的Workspace,载入成功后,如果没有项目,先点击菜单File->New->Project。点击Finish后,就可以使用Eclipse编辑UML文件了,同时上方菜单栏也会在Help后面显示UMLet菜单。下载的是统一的安装文件:eclipse-inst-jre-win64.exe。右边显示的是可用的组件,最右上角的下拉列表可以选择待使用的组件类型。然后点击菜单的File->New->Other,出现下图对话框。会弹出使用协议,选择接受,然后开始下载所需的安装组件。

guoqx的专栏 1125

LilyGO T-Watch学习(一)环境搭建,编译下载

1、安装arduino IDE, 安装后按照说明添加lib IDE上选择“项目->加载库->添加.ZIP库”,选择C:\Users\用户名\Documents\Arduino\libraries\下的TTGO_TWatch_Library-master.zip; 查看是否添加成功: 项目->加载库,滑到最后可看见已添加的TTGO... 参考:https://github.com/Xinyuan-LilyGO/TTGO_TWatch_Library 2、安装esp32 ardui

hxl5955的博客 2906

Eclipse安装php插件

[本文是自己学习所做笔记,欢迎转载,但请注明出处:http://blog.youkuaiyun.com/jesson20121020]   最近,由于需要做一个Android网络App,需要自己搭建服务器,并开发动态网页,为了提高效率,自己在eclipse中安装php插件,并且可以直接在eclipse中浏览自己开发的动态网页,而不需要再在浏览器中输入localhost等路径了,现将整个的配置过程记录如下

jesson20121020的专栏 742

ADS(Arm Developer Suite)安装的坑!

实验课老师让我们区安装ADS,作为嵌入式开发的工具,原本以为这只是一个简单的软件,但是当我安装的时候,我才发现这软件太难了!安装了我大半天,看了其他的博客之后,最终才安装成功???????? 安装过程的一个巨坑就是:安装路径!以及安装许可注册文件 如果没有注意路径,最后安装成功以后打开软件就是蜜汁报错???? 报错了怎么办?删掉已安装的东西,重新安装吧,而且要删干净 再次安装的时候,打开安装包是这个提示...

weixin_42795819的博客 8220

IB网络下不同租户业务隔离方案

IB(InfiniBand)网络隔离可以在不同的通信模式下实现,其中包括 IPoIB(IP over InfiniBand)通信模式。在 IPoIB 模式下,InfiniBand 网络可以承载 IP 数据包,使得基于 IP 的应用程序能够在 InfiniBand 网络上进行通信。在这种情况下,IB 网络隔离通常指通过配置 Partition Key(PKey)来实现不同的租户或应用程序之间的网络隔离。然而,IB 网络隔离并不仅限于 IPoIB 模式。

guganly的专栏 1529

eclipse怎么安装html插件,eclipse html插件怎么安装

eclipse html插件的安装方法:首先打开eclipse,菜单中点击help;然后选择Install new software选项;接着点击add按钮,输入Name;最后勾选Web Page Editor并重启即可。本文操作环境:Windows7系统、Eclipse IDE 2020-06 R版,DELL G3电脑eclipse安装html编辑器插件eclipse本身是没有html编辑器,对...

weixin_26704349的博客 1695

W5500以太网&PoE扩展模块原理图设计,已量产

本文将以 W5500 以太网 & PoE 扩展板为对象,从嵌入式硬件设计的视角,深度拆解其电路架构、核心器件选型、关键功能实现,以及这款板子解决行业痛点的设计思路。

不脱发的程序猿 949

Eclipse-使用Tomcat插件实现数据保存与展示

Eclipse-Tomcat插件实现数据保存与展示项目介绍1.环境搭建2.代码编写(1)udpsend.java(2)index.jsp(2)insert.jsp3.网页效果展示 项目介绍 1.环境搭建 2.代码编写 三个文件的放置位置 (1)udpsend.java package com.udp; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket;

qq_43662263的博客 3730

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Eclipse3.2中安装SWT Designer插件

1.在http://www.swt-designer.com/下载与你使用的eclipse版本相对应的swt designer插件; 2.先不要起动eclipse,把下载的插件包解压,里面是features文件夹,plugins文件夹和一个designer-delete.bat文件,把这 三个拷贝到eclipse安装目录下覆盖其features文件夹,plugins文件夹; 3.删除ec...

yanghaizi123的专栏 161

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

eclipse配置web开发环境配置

eclipse配置web开发环境(jsp)前言eclipse插件的安装tomcat服务器的配置创建jsp网页并测试 前言 我使用的是Eclipse IDE for Java Developers(面向Java开发人员的EclipseIDE),eclipse配置web环境需要eclipse的插件支持,以及tomcat服务器。 eclipse插件的安装 拉开 这个是开发工具,其实就初学jsp的也不...

全栈菜鸟的博客 3303

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Eclipse安装Web/JavaEE插件、Eclipse编写HTML代码

1 Eclipse没有Web插件和JavaEE插件咋整   1.1在Eclipse中菜单help选项中选择install new software选项   1.2在work with 栏中输入http://download.eclipse.org/releases/ganymede/ -->> 敲一下回车   1.3选择web and java ee develo...

weixin_30533797的博客 970

Eclipse ino版安装apata插件时No more handles [Could not detect registered XULRunner to use]

最近使用eclipse编辑jsp网页,安装了Bravo插件,但是却报错:Could not open the Visual Page Editor: No more handles [Could not detect registered XULRunner to use] No more handles [Could not detect registered XULRunner to use]

luo9191的专栏 1949

安装 Google 网页工具包(GWT)

使用 Eclipse 进行安装如果您使用 Eclipse IDE,则可以使用 Eclipse Google 插件安装 Google 网页工具包。重新启动 Eclipse 后,便可以创建新的 GWT 应用程序了。不使用 Eclipse 进行安装如果您还没有 Java SDK,可以安装 Java SDK。Mac 用户注意事项:GWT 托管模式使用 32 位 SWT 绑定,并且需

我的博客 2046

Eclipse的SVN使用

subclipse是Eclipse的SVN插件,通过subclipse在Eclipse中就对SVN进行管理(提交、更新、合并、切换分支等等)。这篇文章介绍的就是如何安装和配置subclipse。安装 访问网页 http://subclipse.tigris.org/servlets/ProjectProcess?pageID=p4wYuA 选择你对应的Eclipse的插件下载地址(Eclipse ...

iteye_14984的博客 88

在Eclipse下编译和运行Nutch

在Eclipse下编译和运行Nutch 就在刚刚,终于把Nutch 0.9在Eclipse中配置成功了,苦恼了我一个星期的问题终于解决了!现在真的是心情舒畅哦!哈哈,当然,我首先还是要感谢一下笨笨的,在网上搜到了他的博客文章,给了我很大的帮助哦。呵呵,还有我的同学,虽然和我隔着远了点,不过还是给我帮了很大的忙哦!哈哈,真的要好好感谢一下他呢!我又在毕业设计成功的道路上迈进了一大步呢!怎么也要纪...

nhy520 140

Eclipse Tomcat插件的配置

Eclipse Tomcat插件的配置 转,整理。 首先下载 对应 eclipse 版本的 tomcat 插件版本,(这里要注意: Tomcat 插件是Tomcat 插件,Tomcat 是 Tomcat, 两者不能混淆!) 下载地址:http://www.eclipsetotale.com/tomcatPlugin.html 然后将得到的压缩包解压,放入 eclipse 的 plugins...

weixin_30426879的博客 171

bravo:eclipse web开发插件

一个号称可以实现所见即所得的eclipse插件,如果真的不错,可以不用dreamweaver了。   安装方式: 1)eclipse的installing software 进行安装 输入:bravo.comxa.org/update 自动安装后即可使用,注意在windows下需要license。所以在linux下用没问题。

薛正华的专栏 1393
下一篇: C库函数手册
C_plus_learner
博客等级 码龄22年 0粉丝 9原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值