C++对象模型

C++程序设计模型直接支持三种程序设计范式:程序模型(面向过程的编程),抽象数据类型模型(ADT)


以及面向对象模型(OO)。


在C++中,只有通过指针和引用的间接处理,才支持OO程序设计所需要的多态性质。并且多态只存在于一个个的public class体系中。


多态的主要用途是经由一个共同的接口来影响类型的封装,此接口通常被定义在一个抽象的基类中。


那么C++是如何支持多态的呢?


有三种方式支持多态。


1.经由一组隐式的转化操作,将一个派生类的指针转化为一个指向其public 基类的指针
2.经由虚函数机制。


对于C++中的某些函数,如果基类的派生类需要自定义适合其自身的功能时,则将这些函数定义为虚函数


3.经由dynamic_cast和typeid运算符。




原则上, 被指定的对象的真实类型在每一个特定执行点之前,是无法解析的。(这一点未想明白,why?)


一个类对象在内存中主要由三部分组成:


非静态数据成员的总和的大小


加上任何犹豫alignment的需求而填补上去的空间(这个主要是因为CPU按字节寻址,为了提升效率)


加上为支持virtual而由内部产生的任何额外负担(虚表指针vptr所占内存)


所谓指针其实是指变量地址,在内存中表示为一个32位的无符号数。指针类型是告诉编译器如何解释这个无符号数所代表的的含义,也即这个特定地址中的内存内容及其大小。


例如int *p; 这个p是一个无符号32位整数,也即是一个指针即内存地址,int类型告诉编译器,p这个内存地址存放的是一个int 整数


class *pc; 这个pc是一个无符号32位整数,也代表一个内存地址,class 类型告诉编译器,pc这个内存地址是一个calss对象的起始地址。




所以转换起始是一种编译器指令。转换并不改变指针的大小(也即不该指针所表示的内存地址),转换只是告诉编译器用转换的对象的类型解释指针所指


内存中的内容及大小
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qls315

感觉好可打赏几毛钱增强更新动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值