类和对象(上)
文章目录
- 类和对象(上)
- 一、面向过程和面向对象初步认识
- 二、类的引入
- 三、类的定义
- 四、类的访问限定符及封装
- 1.访问限定符
- 2.封装
- 五、类的作用域
- 六、类的实例化
- 七、类对象模型
- 八、this指针
- 总结
一、面向过程和面向对象初步认识
C语言和C++两种语言最大的不同就在于C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题。而C++是基于面向对象的,关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互完
成。(注意:C++并不是纯面向对象,Java是纯面向对象,由于C++需要兼容C语言,所以C++可以面向对象和过程混编)
二、类的引入
C++兼容C语言,所以兼容struct结构体语法,C++同时把 struct 升级成了 类
三、类的定义
1.小函数,想成为inline,直接在类里面定义即可;2.如果是大函数,应该声明和定义分离
四、类的访问限定符及封装
1.访问限定符
访问限定符说明:
- public修饰的成员在类外可以直接被访问,也能在类里面访问
- protected和private修饰的成员在类外不能直接被访问(此处protected和private是类似的),只能在类里面访问(protected和private后面讲到继承以后才会有区别)
- 访问权限作用域从该访问限定符出现的位置开始直到下一个访问限定符出现时为止
- class的默认访问权限为private,struct为public(因为struct要兼容C)
注意:访问限定符只能编译时有用,当数据映射到内存后,没有任何访问限定符上的区别
2.封装
封装:将数据和操作数据的方法进行有机结合,隐藏(成员变量 private/ protected)对象的属性和实现细节,仅对外公开接口(开放用成员函数 public)来和对象进行交互。封装的本质上是一种管理~
五、类的作用域
类定义了一个新的作用域,类的所有成员都在类的作用域中。在类体外定义成员时,需要使用 ::
作用域操作符指明成员属于哪个类域。
类中开空间就是定义,不开空间就是声明;所谓类就相当于一个图纸只在实例化对象的时候才是开辟空间
六、类的实例化
用类类型创建对象的过程,称为类的实例化。类只是一个设计图纸,类实例化出对象是图纸建的房子!
七、类对象模型
类对象的存储方式:只保存成员变量,成员函数存放在公共的代码段
结论 :一个类的大小,实际就是该类中”成员变量”之和,当然要注意内存对齐
结构体内存对齐可以参考 : 结构体内存对齐详解
另外:没有成员变量的类对象,给1byte,占位不存储实际数据,标识对象存在
八、this指针
有了 this指针,代码就会被优化成以下 :
this 指针存在哪里?
存在栈,因为他是一个形参!
vs下面传递this指针,是通过exc寄存器传递的,这样this访问变量提高效率
面试题:下面程序编译运行结果是?A .编译报错; B.运行崩溃; C.正常运行!
总结
以上就是今天要讲的内容,本文介绍类和对象上的内容(附图解)。
如果我的博客对你有所帮助记得三连支持一下,感谢大家的支持!