类与对象:
类是对象的抽象,而对象是类的具体实例
类是抽象的,不占用内存,而对象是具体的,占用存储空间
面向过程与面向对象:
C语言是面向过程的,关注的是过程中的数据与方法
C++是面向对象的,关注的是对象的属性与功能
类的定义:
类的成员函数默认是内联的。除了类外定义且不加inline关键字。
类的两种定义方式:
类的声明和定义全部在类体中
类的声明放在.h文件中,类的定义放在.cpp文件中
类的访问限定符及封装:
public成员在类外可以直接访问
protected和private成员在类外不可访问
它们的作用域从该访问限定符出现的位置开始直到下一个访问限定符出现时为止
class的体中如果没有定义限定符,默认是private
struct为public 因为要兼容C
封装:隐藏对象的属性和实现细节,仅对外公开接口和对象进行交互,将数据和操作数据的方法进行有机结合
类的作用域:
类定义了一个新的作用域,类的所有成员都必须处在类的作用域中
在类体外定义成员,需要使用::作用域解析符指明成员属于哪个类域
在类的作用域外,只能通过对象(或指针)借助成员访问操作符 . 和 -> 来访问类成员
类的实例化:用类类型创建对象的过程,称为类的实例化
类只是一个模型一样的东西,限定了类有哪些成员,定义出一个类并没有分配实际的内存空间来存储它
一个类可以实例化出多个对象,实例化出的对象,占用实际的物理空间 存储 类成员变量
类的大小的计算:
只保留对象的具体成员变量,所有成员函数存放在统一的代码公共区
结构体内存对齐规则:
第一个成员在与结构体偏移量为0的地址处
其他成员变量要对齐到某个数字(对齐数)的整数倍的地址处
对齐数 = 编译器默认的对齐数与该成员变量大小的较小值
VS默认值为8 gcc默认值为4
结构体总大小为最大对齐数的整数倍
如果嵌套了结构体的情况,嵌套的结构体对齐到自己的最大对齐数的整数倍处,结构体的整数倍大小就是所有最大对齐数(含嵌套结构体对齐数)的整数倍
类的this指针:
每个成员函数都有一个隐形指针形参,它的名字是固定的,称为this指针,this指针是隐式的(构造函数比较特殊,没有这个隐含this形参)
编译器会对成员函数进行处理,在对象调用成员函数时,对象地址作实参传递给成员函数的第一个形参this指针
this指针是成员函数隐含指针形参,是编译器自己处理的,我们不能在成员函数的形参中添加this指针的参数定义,也不能在调用时显式传递对象的地址给this指针
this指针存在栈上