c++对象学习笔记(1)
来源:互联网 发布:淘宝查号kehuda 编辑:程序博客网 时间:2024/05/02 00:22
面向对象的三大特性,封装、继承、多态。从C语言到C++的转变首先接触的是类和对象。C++对数据的封装不会增加成本。C++在布局和存取时间上的额外负担是在使用virtual机制的时候引起的。一般情况下和C语言的结构体无二。
C++ virtual机制包括:
1.虚函数机制:支持执行期绑定
2.虚基类:多重继承,只存在一个被共享的虚基类。
一. C++的对象模型在机器中的摆放
C++中有两种成员变量:静态成员变量和非静态成员变量
有3中成员函数:静态成员函数和非静态成员函数,virtual函数
1.最简单的模型
成员本身不放入对象中去,而是将指向成员的指针放入对象中。
对象按照成员的声明顺序依次存放指向成员的指针(在书中称之为slot)。
每个成员函数或者成员变量都有自己的slot ,成员是根据slot的索引(次序)来寻址的
对于父类的处理是:存放指向 基类subobj的地址。
2. 表格驱动对象模型
分别将成员变量和成员函数放到两个不同的表中。而对象只是存放指向这两个表的指针
成员变量表:存放变量本身
成员函数表:存放指向成员函数的slot(和简单模型中的存放方式一样)【这个表格后来演化出了虚表】
3.C++对象模型
只是将非静态成员(nonstatic member)放在对象中。而静态成员函数,静态成员变量,和非静态的成员函数都在对象之外。
对于虚函数的处理:
(1)class有个虚表,它保存了所有指向虚函数的指针
(2)对象保存虚指针,用来指向虚表。由构造函数,析构函数,拷贝函数来设定虚表。
所以,C++对象模型中 ,对象存有两种东西:1 非静态成员变量 2 指向虚表的虚指针
虚表也存有两种东西:1 RIIT时用的类型信息 2 指向虚函数的指针
C++所采用的继承模型
基类对象的成员变量直接存放在子类对象中。
对于虚基类1 为每个有关联的虚基类加上指针 2 虚基类表 3放入虚表中
- C++Primer学习笔记------对象和类(1)
- C++primer学习笔记----面向对象程序设计(1)
- 《面向对象程序设计-C++》学习笔记1
- 【C++】【学习笔记】【014】对象
- Objective-C 学习笔记(1)——类与对象
- C/C++学习笔记(五)面向对象的编程
- C++Primer学习笔记------对象和类(2)
- Objective-C学习笔记(三)-类,对象,方法
- C++primer学习笔记----面向对象程序设计(2)
- Object-c学习笔记十一-----对象初始化
- Objective-C 学习笔记 01 - 对象
- O-C学习笔记,类和对象
- OBJ-C类和对象学习笔记
- 《面向对象程序设计-C++》学习笔记2
- c++对象学习笔记(1)
- C++ 对象模型 学习笔记(1)
- Java学习笔记(面向对象1)
- Java学习笔记(1)面向对象
- union后的根据字符长度排序
- CalendarExtender 日历显示中文
- 关于qmail邮件转发的问题 qmail+vpopmail
- 丑恶的服装制造者
- 顺序容器list vector
- c++对象学习笔记(1)
- Rails程序迁移时遇到的问题
- PropertyUtils BeanUtils StringUtils
- 三十而泣
- 闲言碎语话CIM
- 41家大公司年度福利比较 大公司福利档案揭秘
- 使用VS.NET2003操作SQLServer DTS.
- 完整的HTTP通信步骤-7步
- 女人真的是靠第六感去选择男朋友?