摘要:在学习一个东西的时候我总是喜欢去问这样做的理由是什么?也喜欢去究竟他的历史。从中你可以发现所有的设计都在不断改进出来的,从来就没有一个设计是一开始就是完美的。好比是人,之初,性也许是善的,如果我们不通过后天的学习去让自己的心灵完美的话,他就只停留在了人的初级阶段了。 对于信号(signal)也是如...
阅读全文
摘要:一.在语法上的一些区别由于C++是从C发展而来,C++中的struct更多的是去做了兼容的C的部分。在语法层面他们有以下的区别: 1. struct中所有的成员是是public,也就是说你可以对一个struct对象的成员随意访问,而 class默认所有成员都是private的。 2.在C++中的你可以直接使用struct去定义一个变量,而不用像C中那样先要typedef二.在使用中的区别 class在C++中更多的是去作为一种用户自定义类型,而struct更多的是去做数据的聚合。你在解析一个协议的时候应该尽量使用struct,而定义一些像复数类一样的东西是应该尽量使用class
阅读全文
摘要:正如C++之父所说,在C++中应该尽量少做类型转换,太多的类型转换是一种设计不合格的表现。下面就一起来学习一下Effective C++中对这一条的总结吧,我觉得首先需要C++里面的几种类型转换稍作说明: const_cast:和CV限定相关,在实际代码中很少看到使用const_cast的,如果你真的希望在const 函数中改变某个成员变量的话可以将他定义为mutable。恩,还有非cosnt 装换为cosnt 呢?我是没遇到过。 dynamic_cast:当你希望做该种类型转换时可能希望是在一个derived class上执行derived class的方法,但你只有一个指向base c..
阅读全文
摘要:这一条相对来说比较简单,一句话说来就是在你使用变量是才去定义他。在这一点上书上讲了一个避免对象无用构造的方法,const string PASSWDTOOSHORT = "";const int MiniPWLegth = 5;string encryptPasswd(const string& passwd){ string encrypted; if (passwd.length() < MiniPWLegth) { return PASSWDTOOSHORT; }// .....//进行加密处理 return encrypted;}上述代...
阅读全文
摘要:在这一节里,首先给出了一个很大众版的swap函数:namespace std { template<typename T> void swap(T& a, T& b) { T temp(a); a = b; b = temp; }}然后在为了效率的考虑而引出了一种叫做pimpl的手法。其实在<C程序设计语言>5.6节讲指针数组时就提高了一种类似的方法,不过其中讲的是关于交换字符串指针的。恩,从而有了以一下的代码:class Widget {public: Widget(const Widget& rhs); Widg...
阅读全文
摘要:假如我们有以下的有理数类:class Rational {public: Rational(int numerator = 0, int denominator = 1); int getnumerator() const; int getdenominator() const;private: int numerator; int denominator;};在条款19中提到过设计class犹如设计type,也就是说我们的Rational类应该提供类似int类型的功能,因此我们必须添加一些运算符重载函数,标准的教科书函数是这样的,你将自己的重载函数声明为了一个类...
阅读全文
摘要:C++中资源是按照对象的方式来管理的。就拿我们正在使用的Browser来说,他管理各种各样的资源,其中包括cache,浏览记录,下载的历史记录,Cookies记录以及一些webapp的本地记录。我有个习惯就是会定期的清理一下这些资源。现在就来看看Effective C++中给的一些设计建议吧。我们可以不假思索的写出以下的类来:class WebBrowser {public: ...... void clearCache(); void clearHistory(); void clearCookies(); .....};恩,...
阅读全文
摘要:“确定对象的使用前被初始化“毫无疑问这和C++的构造函数有关,对内置类型来说在使用前确保被初始化的最好方式就是在定义一个变量的时候给他一个初始值。而对于自定义类型莫过于类的构造函数了,这相对与C来说的话优雅了很多。 其中将类的成员变量的列表初始化和函数体内初始化,在讲到一下版本的构造函数时个人觉得有点不妥ABEntry::ABEntry(const std::string& name, const std::string& address, const std::list<PhoneNumber>& phones){ t...
阅读全文
摘要:记得在大学暑假的时候看过一遍<Effective C++>,由于当时对整个C++的认识比较的肤浅,很难能真正能体会到Effective中的每一点的含义,好像当时就像读小说一样给读过去了。最近重新开始了这本书的实践性学习,在这里记载一些重新读这本书的收获和一些新的认识。其中可能由于自己的认识不够深入,有错误理解的地方,还希望园中各位朋友多多指正。 其中的第一条就不在这里细写了,其中的关键就是分清楚C++是由那几部分组成的,并且明确你正在使用的是那一部分以及各个部分之间有什么联系。自己的目标是以后每周能够好好的细读其中的3-4个主题,而且将每一条的学习进行详细的整理。现在就从第二条开始
阅读全文