C++视频学习系列:《C++面向对象高级开发》学习笔记(1)

    技术2022-07-13  63

    最近开始看侯捷老师的C++视频:面向对象高级开发,边看边记录自己理解的知识点。

    目前看了P1-P6,其实如果之前有C++的基础,而且看过一两本C++方面的书籍,前面几节还是看的很快的,我平均是按照1.25的倍速看的(侯老师的语速很慢,每个知识点将的都很清楚)。

    总体来说前6节课就是重点在讲如何正规的写C++代码,按照侯老师的说法是培养正规的、大气的编程习惯,一出手就能不同凡响。那该如何写出正规的大气的C++的代码呢?前几节侯老师一直强调的大概就是以下几点了。

    1、尽量使用成员初始化列表对类的成员进行初始化

    什么是成员初始化列表?我们来看看《Essential C++》中给的用法。(P106) Memeber initialization list(成员初始化列表)紧接在参数列表最后的冒号后面,是个以逗号分隔的列表。其中欲赋值给member的数值被放在member名称后面的小括号中。 成员初始化列表

    class complex { complex(double r=0,double i=0) :re(r),im(i) {} private: double re,im; }

    在构造函数内部赋值

    class complex { complex(double r=0,double i=0) { re=r; im=i; } private: double re,im; }

    2、成员变量设置为private

    这个是为了体现C++类的封装性。

    3、传递时尽量用引用传递(pass by reference),不要用值传递(pass by value)

    这个很好理解,当我们要传递的对象内容很多时,传引用要比传值快很多,因为传值需要重新赋值一遍。传引用只是把地址传递过去。具体引用传递怎么用就不写啦,网上这方面的文章提多的。

    4、函数该不该加const要格外注意

    class complex { complex(double r=0,double i=0) :re(r),im(i) {} double real() const { return re;} //函数名后有const,表示不改变数据内容 double imag() {return im;} //imag()后面没有const修饰。 private: double re,im; } void main() { const complex c(2,1); cout<<c.real()<<endl; //正常 cout<<c.imag()<<endl; //编译器提示错误 }

    我们先定义了一个常量对象,然后用对象调用成员函数,测试发现加了const修饰的成员函数real()可以正常调用,不加const修饰的imag()函数调用失败,why?因为我们的对象是个常量,不能改变数据,但是imag()没有被const修饰,修改器认为这个函数可能会改变数据,所以是矛盾的。

    5、return的时候是return by value还是 return by reference

    函数return结果的时候,要看返回的对象是在函数内部临时建立的,还是通过引用传递过来的,如果是临时建立的就要用return by value。 return by value

    int plus(const int x,const int y) { return x+y; }

    return by reference

    int & plus(const int &x,const y) { x+=y; return x; }

    总之前几节的收获就是我们要以正规的、大气的方式的写C++代码。

    Processed: 0.013, SQL: 9