一、导论
classes的两种经典分类是
class without pointer members (complex)
class with pointer members (string)
第一周是第一种,不带指针的类,以complex 的讲解为主。
二、头文件
在同文件中尽量采用防卫式声明
#ifndef __NAME__
#define __NAME__
.......
#endif
头文件的布局
三、构造函数
class complex
{
public:
complex (double r = 0, double i = 0)
: re (r), im (i) { }//初始化列表
private:
double re;
double im;
};
在构造函数的初始化列表中,初始化顺序是以数据成员定义顺序为标准,在这个构造函数先初始化re
,再初始化im
,就算在初始化列表中改变他们的顺序也不会改变初始化的顺序,所以要按照数据成员顺序写入初始化列表,防止产生未定义行为。
complex (double r = 0, double i = 0)
: im (i),re (r) { }//依旧是先初始化re,再初始化im
四、函数签名
C++允许函数重载,函数重载必须保证函数签名不同,函数签名包括 函数名,参数列表,还有 const 关键字。
double real() {}
double real(double r) {}//函数重载
五、小结
第一周的教程主要带我们进入面向对象设计的一些基础,比较容易理解,但是要做到像侯捷老师所说要写得大气。
侯捷老师反复强调的三个建议:
- 防卫式声明
- 不修改数据成员的成员函数要写上const
- 使用 pass by reference