7. 模板与泛型编程 41. 了解隐式接口和编译期多态 面向对象编程世界总以显示接口和运行期多态解决问题 由于w的类型被声明为Widget,所以w必须支持Widget接口。我们可以在源码中找出这个接口(例如在idget的.h文件中),看看它是什么样子,所以我称此为一个显式接口(explicit interface),也就是它在源码中明确可见。 由于Widget的某些成员函数是virtual,w对那些函数的调 2024-11-27 c++ > effective c++ #c++
6. 继承和面向对象设计 32. 确定你的public继承塑模出is-a关系 “public继承”意味is-a is-a并非是唯-存在于classes之间的关系。另两个常见的关系是has-a(有一个)和is-implemented-in-terms-of(根据某物实现出)。 “public继承”意味is-a。适用于base classes身上的每一件事情一定也适用于derived classes身上,因为每 2024-11-27 c++ > effective c++ #c++
5. 实现 26. 尽可能延后变量定义式的出现时间 当定义了一个变量而其类型带有一个构造函数或析构函数,那么当程序的控制流(control flow)到达这个变量定义式时,你便得承受构造成本;当这个变量离开其作用域时,你便得承受析构成本。即使这个变量最终并未被使用,仍需耗费这些成本,所以你应该尽可能避免这种情形。 这让我们联想起本条款所谓“尽可能延后”的真正意义。你不只应该延后变量的定义,直到非得 2024-11-27 c++ > effective c++ #c++
4. 设计与声明 18. 让接口容易被正确使用,不易被误用 1234class Date{public: Date(int month, int day, int year);}; 函数接口 可能以错误的次序传递参数,或者传递一个无效的月份或天数 导入简单的外覆类型来区别天数,月份等 1234567891011121314151617struct Day{exp 2024-11-27 c++ > effective c++ #c++
3. 资源管理 13. 以对象管理资源 123456void f(){ Investment *pInv = createInvestment(); ··· delete pInv;} 可能无法执行delete 在···中过早return 若delete位于某循环中,由于continue或者goto语句过早退出 ···内抛出异常 泄露的不只是内含投资对象的那块内存,还包括那 2024-11-27 c++ > effective c++ #c++
2. 构造、析构、赋值运算 5. 了解c++默默编写并调用那些函数 在C++处理之后,empty class(空类)不再是个空类,如果没有声明,编译器就会为它声明一个copy构造函数,一个copy assignment 操作符和一个析构函数,所有这些函数都是public且inline的。 如果声明了一个构造函数,编译器不再为它创建default构造函数 在一个“内含reference成员”的class内支持赋 2024-11-27 c++ > effective c++ #c++
1. 让自己习惯C++ 1. 视C++为一个语言联邦 C语言 Object-Oriented C++ Template C++。这是C++的泛型编程 STL。STL是个template程序库, 2. 尽量以const,enum,inline替换#define 1#define ASPECT_RATIO 1.653 记号名称ASPECT_RATIO也许从未被编译器看见:也许在编译器开始处理源码之 2024-11-27 c++ > effective c++ #c++
17. io、file 17.1 C++输入和输出概述 17.1.1 流和缓冲区 C++程序把输入和输出看作字节流 streambuf类为缓冲区提供了内存,并提供了用于填充缓冲区、访问缓冲区内容、刷新缓冲区和管理缓冲区内存的类方法 ios base类表示流的一般特征,如是否可读取、是二进制流还是文本流等: ios类基于ios base,其中包括了一个指向streambuf对象的指针成员; ostream 2024-11-27 c++ > c++ primer plus #c++
16. string类和标准模板库 string类 1. 1.构造字符串 size_type是一个依赖于实现的整型,是在头文件string中定义的。string类将string:: npos定义为字符串的最大长度,通常为unsigned int的最大值。另外,表格中使用缩写NBTS(null-terminated string)来表示以空字符结束的字符串一传统的C字符串。 img 指定分割字符: 123s 2024-11-27 c++ > c++ primer plus #c++
15. 友元、异常和其他 1. 友元 友元类、友元函数、类彼此成为对方的友元 img 共同的友元 img 2. 嵌套类 在另一个类中声明的类 被称为嵌套类,通过提供新的类型类作用域来避免名称混乱。 img 模板中也可以嵌套类 3. 异常 1.调用abort() img img 2.返回错误码 img img 2024-11-27 c++ > c++ primer plus #c++