侯捷-C++面向对象高级开发(头文件与类的声明,构造函数,参数传递与返回值)

侯捷-C++面向对象高级开发

1.头文件与类的声明

Object Based:面对的是单一的class的设计

Object Oriented:面对的是多重classes的设计,classes和classes之间的关系

Classes的两个经典分类:

  • Class without pointer members(s)

​ complex

  • Class with pointer member(s)

​ string

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8ypDTZ9U-1636730941844)(C:\Users\admin\AppData\Roaming\Typora\typora-user-images\image-20211112215941187.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dPSHi2Cg-1636730941847)(C:\Users\admin\AppData\Roaming\Typora\typora-user-images\image-20211112220207158.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HygiiKua-1636730941849)(C:\Users\admin\AppData\Roaming\Typora\typora-user-images\image-20211112220651181.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TRhMzufX-1636730941850)(C:\Users\admin\AppData\Roaming\Typora\typora-user-images\image-20211112221320050.png)]

数据一般放在private,函数一般放在public,如果函数只想在类内部访问则页private

2.构造函数

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CvMDYaV0-1636730941851)(C:\Users\admin\AppData\Roaming\Typora\typora-user-images\image-20211112221918411.png)]

构造函数用来创建对象

构造函数可以有多个—overloading(重载)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LD3MpeAG-1636730941852)(C:\Users\admin\AppData\Roaming\Typora\typora-user-images\image-20211112222324649.png)]

同名函数可以同时存在,在编译器看来不重名上图中后两个函数

重载常常发生在构造函数

上图第一二个构造函数在这里不能同时存在,可以写其他的构造函数

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0wypUEhl-1636730941853)(C:\Users\admin\AppData\Roaming\Typora\typora-user-images\image-20211112223058191.png)]

如果放入构造函数放入private

那么不允许外部创建对象

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-etcpRnB0-1636730941853)(C:\Users\admin\AppData\Roaming\Typora\typora-user-images\image-20211112223334814.png)]

上图private中有两个构造函数。

单例模式,每个只能创建一个对象

3.参数传递与返回值

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Sm5C9WhY-1636730941854)(C:\Users\admin\AppData\Roaming\Typora\typora-user-images\image-20211112223652570.png)]

类中有两类函数,对于不会改变数据的函数加上const

上图右侧使用者认为不会改数据,而如果类中如果不加const那么类中实际上数据可以改,两者矛盾

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-drJZomuC-1636730941855)(C:\Users\admin\AppData\Roaming\Typora\typora-user-images\image-20211112224630394.png)]

值传递是将整个传过去,double四个字节就把四个字节的内容传过去。

我们尽量不要pass by value,传引用就相当于传指针,比较快

注意传引用改了后者前者也会跟着改变

如果我们为了速度并而且知道后者不会改进而不会影响前者,那么pass by reference to const,如果更改了那么编译就会出错

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vbJxOTq8-1636730941856)(C:\Users\admin\AppData\Roaming\Typora\typora-user-images\image-20211112225741143.png)]

返回值的传递也应该尽量引用传递

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dmB3ithN-1636730941857)(C:\Users\admin\AppData\Roaming\Typora\typora-user-images\image-20211112230340333.png)]

正常从类外面不能拿private的数据,但是通过朋友可以直接拿数据

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6UYflC9f-1636730941858)(C:\Users\admin\AppData\Roaming\Typora\typora-user-images\image-20211112230707679.png)]

总结来说,当我们写一个类

  1. 数据写在private中
  2. 尽量用引用传递参数和返回值,是否加const依据实际情况而定
  3. 在类中的函数对于不会改变数据的函数加上const,如果不加使用者用时可以会报错
  4. 注意构造函数的initialization list

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Hc9WOcuw-1636730941858)(C:\Users\admin\AppData\Roaming\Typora\typora-user-images\image-20211112231938622.png)]

[外链图片转存中...(img-Hc9WOcuw-1636730941858)]

对于函数内的运算结果有两种处理情况,一种是存到传进来的参数中,一种是定义一个局部变量来存运算结果。

对于定义一个局部变量存运算结果的情景不能用返回引用,因为局部变量函数用完它后它的生命周期就会结束,因此传出去的引用那块内存空间也会被释放

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值