文章目录
- 🌈 Ⅰ 面向对象介绍
- 🌈 Ⅱ 类的引入
- 🌈 Ⅲ 类的定义格式
- 1. 声明和定义不分离
- 2. 声明和定义分离
- 🌈 Ⅳ 类的访问限定符
- 🌈 Ⅴ 类的作用域
- 🌈 Ⅵ 类的实例化
- 🌈 Ⅶ this 指针
🌈 Ⅰ 面向对象介绍
- C++ 关注的是对象,将一个事件拆分成不同的对象,靠对象之间的交互来完成该事件。
- 例如:送外卖这整个事件可以拆分成商家、骑手、客户等多个对象,送外卖这整个事件就靠这些个对象来完成。
🌈 Ⅱ 类的引入
- C++ 的结构体比 C语言 的要厉害那么一些,在 C++ 的结构体中可以定义函数。
🌈 Ⅲ 类的定义格式
- 虽然 struct 也能够完成类的工作,但是分工还是要更明确些比较好,C++ 用 class 来作为定义类的关键字。struct 就只完成 C语言 交给它的本质工作就够了。
定义语法
class 类名
{
// 类体:由成员函数和成员变量组成
};
1. 声明和定义不分离
- 将声明和定义都放在类体中,成员函数如果在类中定义,编译器就有可能将它当作内联函数处理。
2. 声明和定义分离
- 类声明放在 .h 文件,成员函数定义在 .cpp 文件。
- 这种格式的的成员函数在定义时成员函数名前需要加 类名::。
🌈 Ⅳ 类的访问限定符
1. 访问限定符说明
访问限定符 | 限定 | 说明 |
---|---|---|
public | 公有 | 修饰的成员在类外 可以 直接被访问 |
protected | 保护 | 修饰的成员在类外 不能 直接被访问 |
private | 私有 | 修饰的成员在类外 不能 直接被访问 |
2. 访问限定符注意事项
- 访问权限的作用域从该访问限定符出现的位置开始知道下一个访问限定符出现时为止。
- 如果后面没有访问限定符,作用域就到 } 为止。也就是该访问限定符一直作用到类结束为止。
- class 的默认访问权限为 private,struct 的为 public (struct 要兼容 C语言)。
3. 成员函数和成员变量的权限
- C++ 不希望能够直接访问和修改成员变量,所以一般是会将类中的成员变量设置成 private。而成员函数设置成 public。
🌈 Ⅴ 类的作用域
- 类定义了一个新的作用域,类的所有成员都在类的作用域中。在类外定义成员时,需要使用与 ==域用限定符 ::==指明该成员属于哪个类域。
class date
{
public:
void Init(int year, int month, int day);
private:
int _year;
int _month;
int _day;
};
// 如果不指明 Init 函数的类域是 date,那么就无法使用 date 类的成员变量
// 因为这些成员变量是无法在局部域和全局域找到的,自然会报错了
void date::Init(int year, int month, int day)
{
_year = year;
_month = month;
_day = day;
}
🌈 Ⅵ 类的实例化
根据类的类型创建对象 (定义变量) 的过程,称为类的实例化
- 类是对对象进行描述的,是一个模型一样的东西,限定了类有哪些成员,定义出一个类并没有分配实际的内存空间。
- 就像 struct 结构体一样,定义一个结构体不会占用任何空间,但是根据定义的这个结构体来创建对象 (变量) 就开辟的空间了。
- 一个类可以实例化出多个对象,实例化出的对象占用实际的存储空间,用来存储类的成员变量。
🌈 Ⅶ this 指针
- 在调用成员函数时,如果不想特殊化成员变量却又想直接调用成员变量,可以使用 this 指针,this 表示调用的变量为本类中的成员变量。
class date
{
public:
// this 指针指向的是本类的成员变量
void Init(int year, int month, int day)
{
this->year = year;
this->month = month;
this->day = day;
}
private:
int year;
int month;
int day;
};
this 指针的本质
- 在类中定义的函数实际上都会有一个隐藏的 this 指针,对象在调用类中的某个函数时,会顺带将对象的地址传给该函数。因此 this 指针才能够调用对象内的成员变量。
- 将对象的地址传过去之后,公用的函数才能调用对象内私有的成员变量。
- 每个对象内的成员变量都是独立的,成员函数是公有的。
class date
{
public:
void Init(int year, int month, int day)
{
_year = year;
_month = month;
_day = day;
}
void Print()
{
cout << _year << "-" << _month << "-" << _day << endl;
}
private:
int _year;
int _month;
int _day;
};
this 指针不能显示写
- this 指针默认是成员函数的第一个形参,编译器自动生成,你不能写出来。