【GeekBand】C++面向对象高级编程上首周笔记
一.头文件与类的声明
1.类的种类
1.1不带指针的类complex类
object based:面向单一类的设计
1.2带指针的类 string类
object oriented:面向多重类的设计
2.头文件
1.防止头文件被多次包含
使用#ifndef __XX__#define__XX__ (自己定义)#endif 表示如果未定义,则执行下一步定义,
第二次包含时被定义过则跳过下面的内容,就可以保证只会被定义一次,该头文件就不会被包含两次
3.采用模板减少重复代码
template 使用同一份代码
complex c1(2.5,1.5)
complex c2(2,1)
二、构造函数(constructor ctor)
1.inline function :在class body内定义,可提高函数运行速度,函数不可太复杂
2.访问级别:public(对象可直接访问)、private(对象不可直接访问)
3.构造函数(创建对象时调用)
3.1 可设置默认实参
complex(double r = 0,double i = 0)
3.2 列表初始化
complex(double r = 0,double i = 0):re(r),im(i){} 列表初始化 为初始化,大括号内为赋值,初始化效率更高
3.3 无返回值
3.4 构造可有多个(重载)
3.5 ctors放在private区(如singleton设计模式)
三、参数传递与返回值
1.常量成员函数:double real()const{return re;},作用:a.表示不改变数据内容 b.可供常量对象调用,若函数不加const,存在数据被修改的风险,所以常量对象无法调用
2.pass by value 传递整个值,数据量大时效率低
3.pass by reference 相当于传指针,效率高,尽量传引用,若不希望参数被修改,加const
4.return by value 返回函数内部生成的local变量时只能return by value
5.return by reference 可以的情况尽量用return by reference,返回局部变量时,不能使用return by reference
6.friend(友元)函数 可自由取得友元的private成员,相同class的各个objects互为friends
四、操作符重载
1.以成员函数方式重载,所有成员函数带有隐含参数this,this指向调用者
2.return by reference分析,传递者无需知道接收者是以reference形式接收,重载操作符连串使用时需注意返回值,如c3 += c2 += c1,后面的结果在第二次+=时做右值,因此设计时返回值不能为void。
3.以非成员函数重载,区别,无this指针,临时对象不可return by reference
4. ostream& operator << (ostream& os, const complex& x)
{
return os<< '(' <<real(x)<<','<<imag(x)<<')'<<endl;
}必须是全局函数,参数1不能加const,os状态会改变,返回值为ostream,为了可连续使用,可return by reference返回值不是local对象
总结:
1.构造函数使用列表初始化;
2.函数要不要加const;
3.参数的传递尽量考虑pass by reference 且要不要加const;
4.return by reference与return by value区别;
5.数据放private、函数放public