数组与运算符重载
C++ 是一个难学易用的语言!难学一方面在于其广博,因此我选择用笔记的形式精简出一些有用的条款。
# 数组与多态
- 多态和指针算法不能混合在一起,因此不要对数组使用多态
- 尽量不要从具体类(concrete classes)派生具体类
数组的静态分配与动态分配:
- 静态分配:在栈中分配内存,作用于局部,不能用作函数返回值
- 动态分配:需要关键字
new
在堆中分配内存,使用完后要delete
,一般用数组首地址来寻址数组,即数组指针
# 缺省构造函数
避免无用的缺省构造函数,因为他会使得大多数成员函数都得检测异常,从而浪费计算资源,降低效率。
# 运算符重载
谨慎定义类型转换函数,注意,单参数构造函数和隐式类型转换操作符(operator
修饰)会允许编译器进行隐式类型转换。
隐式类型转换举例,定义一个成员函数为:
class Rational{
public:
...
operator double() const; // 函数声明尾加const说明这个函数不可以修改类的成员变量
};
1
2
3
4
5
2
3
4
5
消除方法:
- 将隐式类型转换操作符转换为显式调用的函数。
- 给单参数构造函数添加
explicit
关键字,或者,用 proxy classes 来代替单参数构造函数的参数类型
虽然存在消除方法,但是除非万不得已,不要定义类型转换函数。