C++学习笔记(五)

本文介绍了C++编程中的一些最佳实践,包括复制对象时确保所有成员变量被正确复制,返回引用时应注意的问题,如何明智地使用private继承和多重继承,virtual base classes的使用原则,以及如何正确处理IO类和构造函数等问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

41. 复制对象

勿忘其每一个成分,自己编写copying函数,要确保:复制所有local成员变量;调用所有base classes内的适当copying函数。不要尝试以某个copying函数实现另一个copying函数。应该将共同机能放进第三个函数中,并由两个copying函数共同调用。


42.返回reference

必须返回对象时,别妄想返回其reference。任何时候看到一个reference声明式,都应该立刻问自己,它的另一个名称是什么,因为它一定是某物的另一个名称。
绝不要返回point或reference指向一个local stack对象,或返回reference指向一个heap-allocated对象,或返回pointer或reference指向一个local static对象而有可能同时需要多个这样的对象。

43. private继承

private继承主要用于“当一个意欲成为derived class者想访问一个意欲成为base class者的protected成分,或为了重新定义一或多个virtual函数EBO empty base optimization 空白基类最优化,只适用于单一继承。和复合不同,private继承可以造成empty base最优化。这对致力于“对象尺寸最小化”的程序库开发者而言,可能很重要。

44. 明智而审慎的使用多重继承

C++编译器解析重载函数调用的规则:在看到是否有个函数可取用之前,C++首先确认这个函数对此调用的最佳匹配。找出最佳匹配函数后才检验其可取用性。
virtual base的初始化责任是由继承体系中的最低层class 负责。这暗示:classes若派生自virtual bases而需要初始化,必须认知其virtual bases——不论那些bases距离多远;当一个新的derived class加入继承体系中,它必须承担起virtual bases(不论直接还是间接)的初始化责任

45. virtual base classes: 

非必须;如果必须使用,尽可能避免在其中放置数据。virtual继承会增加大小,速度,初始化(及赋值)复杂度等等成本。如果virtual base classes不带任何数据,将是最具实用价值的情况。多重继承的确有正当用途。其中一个情节涉及"public继承某个Interface class"和"private 继承某个协助实现的class"的两相组合。

46. IO类

IO类(istream,ostream)属于不能被拷贝的类,因此只能通过引用来传递他们。

47. 构造函数

构造函数不能声明称const的,当创建类的一个const对象时,知道构造函数完成初始化过程,对象才能真正获得其常量属性。因此,构造函数在const对象的构造过程中可以向其写值。
只有当类没有声明任何构造函数时,编译器才会自动地生成默认的构造函数。因此,对于一个普通的类来说,必须定义它自己的默认构造函数,而不应该交给编译器。
C++11 提出在狗仔函数的参数列表后写上 =default 以表明要求编译器生成默认构造函数。这条语句既可以和声明出现在一起出现在类的内部,也可以出现在类的外部。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值