类和对象
类定义
类的声明&定义–》类内
类的声明–》.h 类中成员函数的定义–》.cpp
封装概念:类+访问限定符
- private
- proteced 在类外不能被一个对象直接访问
- public
作用域
- 函数重载
类的实例化
- 用类的类型创建对象的过程
类的对象大小:成员函数不计入大小+内存对齐规则
空类的大小:主流的编译器下,大小为1
this指针
如何编译一个类:
1. 识别类名称
2. 识别当前类中的成员变量
3. 识别类中的成员函数 并且 对这些成员函数进行修改
实际内部实现,自己也可以不写 Student *this,实际是Student const *this:
void set(Student *this,int age)
{
this->age = 12;
}
void printinfo(Student *this)
{
cout<<this->age<<endl;
}
this指针
- 指向当前对象,在当前类的成员函数中使用
- 当前对象中并不包含this指针
- this类型:* const
- this时成员函数第一个默认的参数,由编译器通过ecx(thiscall)寄存器自动完成传递;不定参数成员函数(_cdecl)是通过参数压栈方式完成传递
构造函数
- 构造函数和类名同名
- 构造函数没有返回值类型
- ==对象构造时==,==编译器==自动调用对应的构造函数,并且在对象的生命周期内==只调用一次==
- 可以重载
- 可在类内定义,也可在类外定义
- 如果类中没有定义构造函数,则编译器默认生成一个缺省的构造函数。如果我们自己定义了构造函数,则编译器就不会自动生成。
- 无参构造函数和全缺省构造函数都认为是缺省构造函数,缺省构造函数(只能存在一个)
如果要这样使用:
Date d1(2018,1,1);
则要写出构造函数:
Date(int year,int month,int day)
{
...
}
析构函数
与构造函数功能相反,在对象被销毁时,由编译器自动调用,完成类 的一些资源清理和汕尾工作。
特性
1. 析构函数在类名(即构造函数名)加上字符
2. 无参数无返回值一个类只有一个析构函数,如果没有自定义析构函数,系统会自动生成默认的构造函数
3. 对象生命周期结束时,C++编译系统系统自动调用析构函数
4. 注意析构函数体内并不是删除对象,而是做一些清理工作