随笔分类 -  Effective C++学习笔记

Effective C++
摘要:这一章一直在想怎么写,因为比较基础,很容易理解,就按照需要来写吧。假设我们有这样一个类: 1 class Base { 2 private: 3 int x; 4 public: 5 virtual void mf1() = 0; 6 virtual void mf2(); ... 阅读全文
posted @ 2015-01-30 13:46 依然冷月 阅读(227) 评论(0) 推荐(0)
摘要:这一章都在讲述继承的关系。可以举个例子说明:父类是水果,子类是苹果,苹果是一种(is-a)水果,但是水果不一定就是苹果。is-a并不是唯一存在classes之间的关系。另两个常见的关系是has-a(有一个)和is-implemented-in-term-of(根据某物实现出)。这些关系将在后面一一讲... 阅读全文
posted @ 2015-01-22 13:44 依然冷月 阅读(161) 评论(0) 推荐(0)
摘要:引言:编译时间成本在项目中我们都会碰到修改既存类的情况:某个class实现文件做了些轻微改变,修改的不是接口,而是实现,而且只改private成分。重新build这个程序,并预计只花数秒就好,当按下“Build”,结果整个世界都被重新编译和链接了!问题是在c++并没有把“将接口从实现中分离”做得很好... 阅读全文
posted @ 2015-01-22 13:38 依然冷月 阅读(275) 评论(0) 推荐(0)
摘要:引言 inline函数在函数声明或定义中函数返回类型前加上关键字inline即把min()指定为内联。inline函数对编译器而言必须是可见的,以便它能够在调用点内展开该函数。与非inline函数不同的是,inline函数必须在调用该函数的每个文本文件中定义。当然,对于同一程序的不同文件,如果inl... 阅读全文
posted @ 2015-01-15 14:38 依然冷月 阅读(247) 评论(0) 推荐(0)
摘要:假设有个class用来表现夹带背景图案的GUI菜单单,这个class用于多线程环境,所以它有个互斥器(mutex)作为并发控制用: 1 class PrettyMenu{ 2 public: 3 ... 4 void changeBackground(std::istream&... 阅读全文
posted @ 2015-01-12 11:12 依然冷月 阅读(337) 评论(0) 推荐(0)
摘要:假设程序涉及矩形。每个矩形由其左上角和右下角表示。为了让Rectangle对象尽可能小,可能把定义矩形的点放在一个辅助的struct内再让Rectangle去指它: 1 class Point { // 得到坐标 2 public: 3 Point(... 阅读全文
posted @ 2015-01-09 13:41 依然冷月 阅读(305) 评论(0) 推荐(0)
摘要:引言 C风格的转型动作 (T)expression // 将expression转型为T函数风格的转型动... 阅读全文
posted @ 2015-01-08 15:28 依然冷月 阅读(360) 评论(0) 推荐(0)
摘要:引言每一次构造和析构都需要成本,因此我们在设计代码的时候,应该尽可能考虑到构造和析构的成本。第一节 延后实现考虑有以下的代码: 1 void encrypt(string& s); 2 string encryptPassword(const sting& password) { 3 str... 阅读全文
posted @ 2015-01-06 15:44 依然冷月 阅读(200) 评论(0) 推荐(0)
摘要:引言在我的上一篇博客中,讲述了swap函数。原本swap只是STL的一部分,而后成为异常安全性编程的脊柱,以及用来处理自我赋值可能性。一、swap函数标准库的swap函数如下:1 namespace std {2 template3 void swap(T &a, T& b)4 ... 阅读全文
posted @ 2014-12-26 14:38 依然冷月 阅读(255) 评论(1) 推荐(0)
摘要:引言假设我们有这样的类:1 class A{2 public:3 A(int num = 0, int den = 1) {};4 int num() const;5 int den() const;6 const A operator* (const A& rhs)... 阅读全文
posted @ 2014-12-25 11:19 依然冷月 阅读(321) 评论(0) 推荐(0)
摘要:作者在这一节中花了大幅度的篇幅来介绍为什么最好使用non-member、non-friend函数。思路如下:场景:如果有一个class用来表示网页浏览器,那么清楚缓存及历史记录的时候,我们可能定义下面的类:class Web {public: void clearCache(); voi... 阅读全文
posted @ 2014-12-18 14:10 依然冷月 阅读(259) 评论(0) 推荐(0)
摘要:这一章并没有什么太多的内容,作者无非想告诉我们一件事:成员变量应该是private。为此,他列举了以下的理由:1.成员函数来返回成员变量是非常高效;2.protected成员变量并不比public具有封装性。 阅读全文
posted @ 2014-12-17 13:14 依然冷月 阅读(159) 评论(0) 推荐(0)
摘要:引言在条目20中,我们知道了值传递和引用传递的效率问题,因此在设计程序时,我们可能就尽可能来返回引用而不是值。可是,可能会犯下面的一些错误:传递一些引用指向其实并不存在的对象。第一节:返回临时变量的引用假如我们有以下的例子,先看值传递 1 class A { 2 public: 3 A(in... 阅读全文
posted @ 2014-12-16 11:25 依然冷月 阅读(158) 评论(0) 推荐(0)
摘要:前言: 我们都用过C的值传递方式,那么在C++情况下,值传递是怎样工作的呢?比如:int f... 阅读全文
posted @ 2014-12-15 17:44 依然冷月 阅读(209) 评论(0) 推荐(0)
摘要:前言我们在编写程序的时候,无论哪一种语言,总是会告诉你这种语言应该有的类型。我们将它们直接拿来使用,可是从来没有考虑过这些类到底是怎么设计出来的!所幸的是:在OOP中,每当我们定义一个新的class,也就相当于定义了一个新type。那么,一个好的type是怎样设计出来的呢?我们需要考虑哪些事情呢?1... 阅读全文
posted @ 2014-12-15 16:08 依然冷月 阅读(137) 评论(0) 推荐(0)
摘要:□第一节 什么是接口?什么是接口?百度百科的解释:两个不同系统(或子程序)交接并通过它彼此作用的部分。接口的概念贯穿于整个软件开发过程中,本文讨论的接口概念仅局限于以C++实现的class,function等。class接口 以OOP的思想,现实的问题总能抽象成一个个class,这些class包含... 阅读全文
posted @ 2014-11-24 15:50 依然冷月 阅读(214) 评论(0) 推荐(0)
摘要:这一节也比较简单,先假设我们有如下的函数:int foo();void memFoo(shared_ptr pw, int foo);现在假设我们要调用memFoo函数:memFoo(new W, foo());但是这样写编译是通不过的,我们可以改造为:memFoo(shared_ptr(new W... 阅读全文
posted @ 2014-11-17 15:53 依然冷月 阅读(160) 评论(0) 推荐(0)
摘要:这一节比较简单,可以总结为以下:std::string *stringPtr1 = new std::string;std::string *stringPtr2 = new std::string[100];..delete stringPtr1; //... 阅读全文
posted @ 2014-11-17 15:17 依然冷月 阅读(144) 评论(0) 推荐(0)
摘要:引言资源管理类是防止资源泄漏的有力武器,但是许多APIs直接指涉资源,除非你发誓永不使用这样的APIs,否则只得绕过资源管理对象(resource-managing objects)直接访问原始资源(raw resources)。例如在条款13中引入了智能指针如auto_ptr或tr1::share... 阅读全文
posted @ 2014-11-17 14:54 依然冷月 阅读(295) 评论(0) 推荐(0)
摘要:第一节 条款13中讲到“资源取得的时机便是初始化时机”并由此引出“以对象管理资源”的概念。通常情况下使用std中的auto_ptr(智能指针)和tr1::shared_ptr(引数智能指针)作为管理资源的对象。事实上,这种管理方法十分有效。但是,auto_ptr和tr1::shared_ptr只... 阅读全文
posted @ 2014-11-17 14:32 依然冷月 阅读(358) 评论(0) 推荐(0)