最近在看侯捷的一套课程《C++面向对象开发》,刚看完第一节introduction之后就被疯狂圈粉。感觉侯捷所提及所重视的部分也正是我一知半解的知识盲区,我之前也写过一些C++面向对象的程序,不过正如侯捷所说,我还仅仅停留于Object-based层面,写程序时总是在想如何封装好一个类,而不是Object-oriented强调类与类之间关系的设计。
这门课程分为两部分,第一部分讲Object-based,第二部分讲Object-oriented;第一部分又分为两部分:带指针的类的封装和不带指针类的封装。
本文将以模板库中的complx复数类的部分内容为核心,在分析源代码的同时,讲解一些良好的代码风格和编程习惯,比如inline内联函数的使用、friend友元函数的使用、函数参数及返回值何时pass by value何时pass by reference等等。
部分代码complex.h
1 #ifndef __COMPLEX__ 2 #define __COMPLEX__ 3 4 class complex 5 { 6 public: 7 complex(double r = 0, double i = 0) 8 : re (r), im (i) 9 { } 10 complex& operator += (const complex&); 11 double real () const { return re; } 12 double imag () const { return im; } 13 private: 14 double re, im; 15 16 friend complex& __doapl (complex*, const complex&); 17 }; 18 19 #endif