侯捷C++面向对象(上)

    编程     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

知识点总结:

  1. inline函数,若函数在class body内定义,便自动能为inline函数候选人,函数外要加inline关键字,但究竟能不能成为inline函数,由编译器决定。inline函数像宏一样,有它的特性,但是没有它的缺点,inline函数执行速度很快。
  2. 构造函数初始化要使用初始化列表的方式,不要用assign赋值的方式。数值的设定有两个阶段:先是初始化,再是赋值。构造函数可以overloading函数重载,但是在编译器看来是不重名的。
  3. class有带指针的,有不带指针的,不带指针的class多半不用写析构函数。
  4. class中的函数有两种:改变成员数据的和不改变成员数据的,不改变成员数据的函数要加const
  5. 参数传递尽可能的使用引用pass by reference),不要传值pass by value),因为pass by value整包传过去,速度慢,而C语言中有指针,可以传首地址过去,加快了速度,C++中多了引用pass by reference),拥有指针一样的特性(底层就是指针),但是更漂亮。指针和引用传到另一个函数里,改变值,本体也变了,但是如果传引用只是为了速度更快,不想改变值,加上const关键字。
  6. 同样,函数返回值类型同样用引用(return by reference)。传递者无需知道接受者试试以什么样的形式接收。返回value可以用value接收,也可以用reference接收。而指针一定要有指针类型去接收。
  7. reference作函数返回值类型,作参数传递,这些是很小的细节,但是影响效率。
page PV:  ・  site PV:  ・  site UV: