EC读书笔记系列之17:条款41、42、43、44、45、46

条款41 了解隐式接口与编译器多态

记住:

★classes和templates都支持接口和多态

★对classes而言接口是显式的(explicit),以函数签名为中心。多态则是通过virtual函数发生于运行期

★对templates而言,接口是隐式的(implicit),奠基于有效表达式。多态则是通过template具现化函数重载解析发生于编译期

条款42 了解typename的双重意义

记住:

★声明template参数时,前缀关键字class和typename可互换(函数模板或类模板均可!!!)

★请使用关键字typename标识嵌套从属类型名称;但不得在base class lists或成员初始列内以它作为base class修饰符

---------------------------------------------------------------------

时间: 2024-08-25 00:42:02

EC读书笔记系列之17:条款41、42、43、44、45、46的相关文章

EC读书笔记系列之9:条款16、17

条款16 成对使用new和delete时要采取相同形式 记住: ★若你在new表达式中使用[ ],必须在相应的delete中也使用[ ],反之亦然 ------------------------------------------------------------------ 当结合typedef使用时,应特别注意:如: typedef std::string AddressLines[4]; std::string *pal = new AddressLines; //等同于new str

EC读书笔记系列之10:条款16、17

条款18 让接口容易被正确使用,不易被误用 记住: ★“促进正确使用”的办法包括接口的一致性,以及与内置类型的行为兼容 ★“阻止误用”的办法包括建立新类型.限制类型上的操作,束缚对象值,以及消除客户的资源管理责任(即类的设计者应先发制人). ★tr1::shared_ptr支持定制型删除器.这可防范DLL问题,可被用来自动解除互斥锁等等. -------------------------------------------------------------------------- C++的

EC读书笔记系列之1:条款1、条款2、条款3

条款1:视C++为一个语言联邦 记住: ★C++高效编程守则视状况而变化,这取决于你使用C++的哪一部分 C: Object-oriented c++: Template c++: STL 条款2:尽量以const,enum,inline替换#define 记住: ★对于单纯常量,最好以const对象或enums替换#define ★对于形似函数的宏,最好改用inline函数替换#define ---------------------------------------------------

EC读书笔记系列之3:条款5、条款6、条款7

条款5:了解C++默默编写并调用哪些函数 记住: ★编译器可以(仅仅是可以,并非必须,仅当程序中有这样的用法时才会这么做!!!)暗自为class创建default构造函数,copy构造函数,copy assignment操作符以及析构函数. ---------------------------------------------------------------------------------------------------------------------------------

EC读书笔记系列之14:条款26、27、28、29

条款26 尽可能延后变量定义式的出现时间(Lazy evaluation) 记住: ★尽可能延后变量定义式的出现.这样做可增加程序的清晰度并改善程序效率 ---------------------------------------------------------------------- 举例说明: std::string encryptPassword( const std::string &password ) { using namespace std; string encrypt

EC读书笔记系列之12:条款22、23、24

条款22 将成员变量声明为private 记住: ★切记将成员变量声明为private.这可赋予客户访问数据的一致性.可细微划分访问控制.允诺约束条件获得保证,并提供class作者以充分的实现弹性. ★protected并不比public更具封装性 条款23 宁以non-member-non-friend替换member函数 记住: ★宁可拿non-member-non-friend函数替换member函数.这样可增加封装性.包裹弹性和机能扩充性. -----------------------

EC读书笔记系列之11:条款20、21

条款20 宁以pass-by-reference-to-const替换pass-by-value 记住: ★尽量以pass-by-reference-to-const替换pass-by-value.前者通常高效,并可避免切割问题 ★以上规则并不适用于内置类型,以及STL的迭代器和函数对象.那些应用pass-by-value 条款21 必须返回对象时,别妄想返回其reference 记住: ★绝不要返回pointer或reference指向一个local stack对象(如函数里的局部对象):或返

EC读书笔记系列之18:条款47、48

条款47 请使用traits classes表现类型信息 记住: ★Traits classes使得“类型相关信息”在编译期可用.它们以templates和“templates特化”完成实现 ★整合重载技术后,traits classes有可能在编译期对类型执行if...else测试 --------------------------------------------------------- 条款48 认识template元编程(TMP) 记住: ★TMP(模板元编程)可将工作由运行期移往

EC读书笔记系列之20:条款53、54、55

条款53 不要轻忽编译器的警告 记住: ★严肃对待编译器发出的警告信息.努力在你的编译器的最高(最严苛)警告级别下争取“无任何警告”的荣誉 ★不要过度依赖编译器的报警能力,∵不同的编译器对待事情的态度并不相同.一旦移植到另一个编译器上,你原本倚赖的警告信息有可能消失. 条款54 让自己熟悉包括TR1在内的标准程序库 记住: ★C++标准程序库的主要机能由STL.iostreams.locales组成.并包含C99标准程序库. ★TR1添加了智能指针(tr1::shared_ptr).一般化函数指