一、类
1.类的定义
class为定义类的关键字,Student为类的名字,{}中为类的主体,注意类定义结束时后⾯分号不能省略。
#include<iostream>
using namespace std;
class Student
{
//成员
};
- 类体中内容称为类的成员:类中的变量称为
类的属性或成员变量
; 类中的函数称为类的⽅法或者成员函数
。 - 定义在类⾯的
成员函数
默认为inline。
2.访问限定符
- public修饰的成员在
类外
可以直接被访问
。 - protected和private修饰的成员在
类外不能直接被访问
。 - 访问权限作⽤域从
该访问限定符
出现的位置开始直到下⼀个访问限定符
出现时为⽌,如果后⾯没有访问限定符,作⽤域就到 }即类结束。 - class定义成员没有被访问限定符修饰时默认为private,struct默认为public。
class Student
{
public://公有
private://私有
protected://受保护
};
3.类域
- 类定义了⼀个新的作⽤域,类的所有成员都在类的作⽤域中,在类体外定义成员时,需要使⽤ :: 作⽤域操作符指明成员属于哪个类域。
二、实例化
1.实例化概念
⽤类类型在物理内存中创建对象的过程,称为类实例化出对象。
类是对象进⾏⼀种抽象描述
,是⼀个模型⼀样的东西,限定了类有哪些成员变量,这些成员变量只是声明,没有分配空间,⽤类实例化出对象时,才会分配空间
。- ⼀个类可以实例化出
多个对象
,实例化出的对象 占⽤实际的物理空间,存储类成员变量。
2.内存对⻬规则
- 第⼀个成员在与结构体偏移量为0的地址处。
- 其他成员变量要对⻬到某个数字(对⻬数)的整数倍的地址处。
- 注意:对⻬数 = 编译器默认的⼀个对⻬数 与 该成员⼤⼩的较⼩值。
- VS中默认的对⻬数为8
- 结构体总⼤⼩为:最⼤对⻬数(所有变量类型最⼤者与默认对⻬参数取最⼩)的整数倍。
- 如果嵌套了结构体的情况,嵌套的结构体对⻬到⾃⼰的最⼤对⻬数的整数倍处,结构体的整体⼤⼩就是所有最⼤对⻬数(含嵌套结构体的对⻬数)的整数倍
三、 this指针
- 编译器编译后,类的成员函数默认都会在形参第⼀个位置,增加⼀个当前类类型的指针,叫做this指针。
- 类的成员函数中访问成员变量,本质都是通过this指针访问的
- C++规定不能在实参和形参的位置显⽰的写this指针(编译时编译器会处理),但是可以在函数体内显⽰使⽤this指针。
四、 构造函数
- 构造函数是特殊的成员函数,需要注意的是,构造函数虽然名称叫构造,但是构造函数的主要任务并不是开空间创建对象(我们常使⽤的局部对象是栈帧创建时,空间就开好了),⽽是对象实例化时初始化对象。
- 构造函数⾃动调⽤的特点就完美的替代的了Init。
1.构造函数的特点
- 函数名与类名相同。
- ⽆返回值。
- 对象实例化时系统会⾃动调⽤对应的构造函数。
- 构造函数可以重载。
- 如果类中没有显式定义构造函数,则C++编译器会⾃动⽣成⼀个⽆参的默认构造函数,⼀旦⽤⼾显式定义编译器将不再⽣成。
- ⽆参构造函数、全缺省构造函数、我们不写构造时编译器默认⽣成的构造函数,都叫做默认构造函数。但是这三个函数有且只有⼀个存在,不能同时存在。⽆参构造函数和全缺省构造函数虽然构成函数重载,但是调⽤时会存在歧义。
总结
面相对象的三大特征就是封装,继承和多态