侯捷C++面向对象(上)
侯捷C++面向对象
很喜欢这种娓娓道来的讲课,而不是填鸭式的灌输知识点,对零碎的知识点特此记录。
培养正规的、大气的编程习惯
class
是C++中最重要的,侯捷老师:“一个人写了一个class
,看他是否受过良好的、正规的训练,看以下几点:”
- 数据成员用
private
,成员函数大部分public
- 构造函数使用初始化列表的方式初始化。
initialization list
,并且要写默认值。 - 参数传递是
by value
还是by reference
,同时考虑是否加const
。尽可能的用by reference
- 函数返回值是
return by value
还是return by reference
,同时考虑是否加const
。尽可能的用return by reference
- 对于一个函数本身,考虑是否加
const
知识点总结:
- inline函数,若函数在
class body
内定义,便自动能为inline
函数候选人,函数外要加inline
关键字,但究竟能不能成为inline
函数,由编译器决定。inline
函数像宏一样,有它的特性,但是没有它的缺点,inline
函数执行速度很快。 - 构造函数初始化要使用初始化列表的方式,不要用
assign
赋值的方式。数值的设定有两个阶段:先是初始化,再是赋值。构造函数可以overloading
,函数重载,但是在编译器看来是不重名的。 class
有带指针的,有不带指针的,不带指针的class
多半不用写析构函数。class
中的函数有两种:改变成员数据的和不改变成员数据的,不改变成员数据的函数要加const
- 参数传递尽可能的使用引用(
pass by reference
),不要传值(pass by value
),因为pass by value
是整包传过去,速度慢,而C语言中有指针,可以传首地址过去,加快了速度,C++中多了引用(pass by reference
),拥有指针一样的特性(底层就是指针),但是更漂亮。指针和引用传到另一个函数里,改变值,本体也变了,但是如果传引用只是为了速度更快,不想改变值,加上const
关键字。 - 同样,函数返回值类型同样用引用(return by reference)。传递者无需知道接受者试试以什么样的形式接收。返回
value
可以用value
接收,也可以用reference
接收。而指针一定要有指针类型去接收。 reference
作函数返回值类型,作参数传递,这些是很小的细节,但是影响效率。