C++ 突袭
基本知识
- 必须在函数声明中声明默认参数!
- 默认参数必须在形参列表的结尾!避免歧义
- 函数声明就是函数的身份证,外部调用方不看定义只看声明
- 和 取地址 类似
函数
overload 函数重载
要求:
- 函数的名字相同
- 参数列表(数量,类型)不同
注意:与返回值无关
问题 --避免overload歧义
inline 内联函数
内联函数:指建议编译器编译时将某个函数在调用处直接展开,避免运行时调用开销。
内联函数的要求:若一函数功能简单,则函数调用的额外开销占比较高。
注意:inline只是建议
- 并不是写了 inline 关键字就一定会被内联,只是提出建议,由编译器决定是否采纳
- 内联这个动作发生在编译时,提升运行时的效率
面向对象
面向对象:既然随着系统参与实体的增多,过程变得复杂,那就不费力描述每一个可能的过程了,转而描述每一个实体。
实体=属性+行为
从面向过程到面向对象 对于问题:求解不同图形的周长和面积
抽象:class 类和对象
面向对象的四个特征之1:抽象=分析问题,识别出各个实体及其属性和行为
每个实体 = 一个类class = 定义它的属性(成员变量) + 行为(成员函数)
例如:
class Circle {
private:
double radius;
public:
Circle(double radius) {
this->radius = radius;
}
double getRadius() {
return radius;
}
};
简单理解:结构体 + 行为(成员函数) = 类
- 事实上C++中也支持结构体定义成员方法,两者并无本质区别了
- 根据使用场景选择结构体或类:
•结构体:主要记录数据,极少行为(如资源配置信息、网络连接信息等)
•类:既有属性也有行为(如学生类、用户类、玩家类等)
特殊的成员函数:构造函数与析构函数
constructor 构造函数:对象实例化时,分配空间后,完成对象的构造工作(如初始化成员变量、分配资源等)
destructor 析构函数:对象生命周期结束时,回收空间前,完成对象的清理工作(如释放资源等
this 指针
• this的中文含义:这、这个、当前这个
• this指针在类定义内部使用,指向当前对象
this指针保证每个对象拥有自己的数据成员,但共享处理这些数据成员的代码。(√)
封装 Encapsulate
封装:将类的一些成员变量或方法藏起来,不允许外界直接操作
- 不允许直接操作 ≠ 不允许操作,而是通过自定义的特定方法操作
getter / setter 方法
为某些私有成员变量提供外部读写方法:get_xxx(读) / set_xxx(写)
- getter 和 setter 一般是 public 的,不然没意义
- getter和setter函数的名字没有要求,只是一般用get_xxx,不是特殊函数。
getter函数通常会被设置为const函数,setter函数则通常接收const参数
补 const常成员函数:不能修改类成员变量,如果修改了,回过不了编译
//getter函数的通常格式(设xxx的类型为T)
T get_xxx() const {
return xxx;
}
//setter函数的通常格式(设xxx的类型为T)
void set_xxx(const T& xxx) {
this->xxx = xxx;
}