侯捷-C++面向对象高级开发
1.头文件与类的声明
Object Based:面对的是单一的class的设计
Object Oriented:面对的是多重classes的设计,classes和classes之间的关系
Classes的两个经典分类:
- Class without pointer members(s)
complex
- Class with pointer member(s)
string
数据一般放在private,函数一般放在public,如果函数只想在类内部访问则页private
2.构造函数
构造函数用来创建对象
构造函数可以有多个—overloading(重载)
同名函数可以同时存在,在编译器看来不重名上图中后两个函数
重载常常发生在构造函数
上图第一二个构造函数在这里不能同时存在,可以写其他的构造函数
如果放入构造函数放入private
那么不允许外部创建对象
上图private中有两个构造函数。
单例模式,每个只能创建一个对象
3.参数传递与返回值
类中有两类函数,对于不会改变数据的函数加上const
上图右侧使用者认为不会改数据,而如果类中如果不加const那么类中实际上数据可以改,两者矛盾
值传递是将整个传过去,double四个字节就把四个字节的内容传过去。
我们尽量不要pass by value,传引用就相当于传指针,比较快
注意传引用改了后者前者也会跟着改变
如果我们为了速度并而且知道后者不会改进而不会影响前者,那么pass by reference to const,如果更改了那么编译就会出错
返回值的传递也应该尽量引用传递
正常从类外面不能拿private的数据,但是通过朋友可以直接拿数据
总结来说,当我们写一个类
- 数据写在private中
- 尽量用引用传递参数和返回值,是否加const依据实际情况而定
- 在类中的函数对于不会改变数据的函数加上const,如果不加使用者用时可以会报错
- 注意构造函数的initialization list
对于函数内的运算结果有两种处理情况,一种是存到传进来的参数中,一种是定义一个局部变量来存运算结果。
对于定义一个局部变量存运算结果的情景不能用返回引用,因为局部变量函数用完它后它的生命周期就会结束,因此传出去的引用那块内存空间也会被释放