一、C++类与面向对象
struct 和 class
- struct 是C 中用户自定义类型,主要功能是对功能相关数据的封装
- struct 不能直接封装函数,但可以通过封装函数指针来间接封装函数
- struct 就是 class 的初级阶段,class 在 struct 基础上做了很多扩展,便有了面向对象
访问权限
- 类是对数据(成员变量)和方法(成员函数)的封装
- 封装的一个重要特征就是访问权限管控,本质是为了隐藏实现细节,避免意外篡改
- C++ 支持三个访问管控级别:private、protected、public
C++的对象创建和销毁
- 对象的本质等同于C中的变量,对象的创建和销毁也就是变量的产生和销毁,本质上是变量对应的内存地址的分配和释放。
- C中的全局变量和局部变量都是自动分配和回收内存的,堆内存需要用户手动申请和释放(malloc和free调用)
- C++ 中因为变量升级成了对象,涉及到构造函数和析构函数,因此 malloc 和free 升级为了 new 和 delete
- C++ 中仍然大量使用全局变量和局部变量,但是动态分配占比越来越多。这是业务特点决定的,不是C++语言决定的。语言只是提供机制,业务才决定策略。
二、C++中 static 和 this 关键字
static 在C 中的用法
- 静态全局变量和函数,限制链接属性(只能在当前C文件中使用)。C++中建议优先使用命名空间机制替代
- 静态局部变量,更改地址域和生命周期(随程序终止而终止)。C++中继续沿用
static 在 C++中新增用法
- 用在 class 中,有静态数据成员 和 静态成员函数
- 简单理解:静态成员和方法都是属于 class 的,而非静态是对于对象的(只有对象才能调用)
- 静态类往往用在单例模式中,实际上和面向对象的思想有所差异
this 关键字
- 本质是个指针,指向当前对象
- this 的主要作用是让我们在未定义对象前可以在方法中调用对象里的成员
static和this的使用demo
#include <iostream>
using namespace std;
class A
{
public:
// 成员变量
int i;
// 成员函数 方法
void func1(void);
// 静态成员变量
static int j;
// 静态成员方法
static void func2(void); // static是一个声明性的
};
void A::func1(void)
{
// cout << "A::func1, i = " << i << endl; // 成员函数中访问成员变量,等同于下面
cout