![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Effective C++
文章平均质量分 95
Still_Believe_
爱好编程C++,Java,Python。github主页:https://github.com/klc407073648
展开
-
Effective C++读书笔记(十)——模板与泛型编程
1.了解隐式接口和编译期多态 class Widget { public: Widget(); virtual ~Widget(); virtual std::size_t size() const; virtual void normalize(); void swap(Widget& other) } class doProcessing(Widget& w) { if(w.size() > 10 && w !=原创 2020-10-08 08:53:13 · 92 阅读 · 0 评论 -
Effective C++读书笔记(九)——继承与面向对象设计
1.确认你的public继承塑模出is-a关系 C++面向对象编程,最重要的一个规则:public inheritance(公开继承)意味“is-a”(是一种)的关系。即能够施行于base class 对象身上的每件事情,也可以施行于derived class对象身上,因为derived class对象也都是一个base class对象。但是界限很难鉴别,举例如下: class Person{...}; class Student:public Person{...}; 人的概念比学生更一般化,学生是原创 2020-10-07 08:48:23 · 202 阅读 · 0 评论 -
Effective C++读书笔记(八)——实现
1.为“异常安全”而努力是值得的 void PrettyMenu::changeBackground(std::istream& imgSrc) { lock(&mutex); delete bgImage; ++imageChanges; bgImage = new Image(imgSrc); unlock(&mutex); } 上述函数未满足异常安全的两个条件: 1.不泄露任何资源;//new Image(imgSrc)抛出异常时,原创 2020-10-06 09:25:10 · 85 阅读 · 0 评论 -
Effective C++读书笔记(七)——实现
1.尽可能延后变量定义式的出现时间 只要你定义了一个变量而其类型带有一个构造函数或析构函数,那么当程序控制流到达这个变量定义式时,你便得承受构造成本;当这个变量离开其作用域时,你便得承受析构成本。即使这个变量最终并未被使用,仍需耗费这些成本,所以你一个尽可能避免这种情形。 V1: std::string encryptPasswd(const std::string& password) { using namespace std; string encrypted;原创 2020-10-05 19:26:01 · 141 阅读 · 0 评论 -
Effective C++读书笔记(六)——设计与声明
1.必须返回对象时,别妄想返回其reference class Rational { public: Rational(int numerator=0,int deominator = 1); ... private: int n,d; friend const Rational operator*(const Rational& lhs,const Rational& rhs); } 函数创建新对象可以在stack空间或heap空间创建。 stack.原创 2020-10-04 09:38:02 · 114 阅读 · 0 评论 -
Effective C++读书笔记(五)——设计与声明
1.让接口容易被正确使用,不易被误用 class Date { public: Date(int month, int day, int year) ... }; 上述接口可能会引起客户调用的错误,即填写顺序出错: Date d(2, 30, 2020); Date d(30, 2, 2020); 进一步,可以将month,day,year封装成struct或class class Date { public: Date(const Month& m, con原创 2020-10-02 09:54:18 · 107 阅读 · 0 评论 -
Effective C++读书笔记(四)——资源管理
资源管理 1.以对象管理资源 中心思想:把资源放进对象内,便可以依赖C++的析构函数自动调用机制确保资源被释放。 关键点: 1.获得资源后立刻放进管理对象。(Resource Acquisition Is Initialization,RAII) 2.管理对象运用析构函数确保资源被释放。 注意事项: 1.为防止资源泄漏,请使用RAII对象,它们在构造函数中获取资源并在析构函数中释放资源。 2.两个常被使用的RAII classes分别是share_ptr和auto_ptr,前者通常是较佳选择原创 2020-09-30 08:05:02 · 118 阅读 · 0 评论 -
Effective C++读书笔记(三)——构造/析构/赋值运算
1.区分接口继承和实现继承 class Shape { public: virtual void draw() const = 0; virtual void error(const std::string& msg); int objectID() const; ... }; class Rectangle : public Shape {...}; class Ellipse: public Shape {...}; ———————————————————原创 2020-09-29 08:11:40 · 110 阅读 · 0 评论 -
Effective C++读书笔记(二)——构造/析构/赋值运算
目录 1.为多态基类声明virtual析构函数 2.别让异常逃离析构函数 3.绝不在构造和析构过程中调用virtual函数 4. 令operator= 返回一个reference to *this 5.在operator=中处理“自我赋值” 1.为多态基类声明virtual析构函数 例如工程模式,创建一个base class指针,指向生成的derived class对象。 class TimeKeeper { public: TimeKeeper(); ..原创 2020-09-28 08:16:58 · 99 阅读 · 0 评论 -
Effective C++读书笔记(一)——构造/析构/赋值运算
目录 1.确认对象被使用前已先被初始化 2.了解C++默默编写并调用哪些函数 3.若不想使用编译器自动生成的函数,就该明确拒绝 1.确认对象被使用前已先被初始化 class Point { public: Point(int x,int y); ~Point(); void printPoint(); private: int m_x,m_y; }; _____________________ 成员初值列方式(memb.原创 2020-09-27 21:04:40 · 104 阅读 · 0 评论