EffectiveC++】的更多相关文章

28 页 C++规定,对象的成员变量的初始化动作发生在进入构造函数本体之前. 构造函数的一个较佳的写法是,使用所谓的member initialization list替换赋值动作. 29页 但请立下一个规则,规定总是在初值列中列出所有成员变量,以免还得记住哪些成员变量可以无需初值. 31页 幸运的是一个小小的设计便可以完全消除这个问题.将每个non-local static对象搬到自己的专属函数内(改对象在此函数内被声明为static).这些函数返回一个reference指向它所含的对象.然后…
[EffectiveC++]item34:区分接口继承和实现继承…
1.尽量使用初始化列表而不要再构造函数里赋值,初始化顺序和声明的顺序一致,一些类型如const,引用等,必须使用初始化.对于非内部数据类型成员对象应当采用初始化表,以获取更高的效率.example:B::B(const A& a):m_a(a){}只调用了类A的拷贝构造函数2.基类都使用虚析构函数,这样才能在使用多态时,准确的析构派生类3.operator>>和operator<<决不能是成员函数.如果f是operator>>或operator<<,…
test* create_test(); shared_ptr<test> create_test();//下面的接口比上面的接口要好 auto_ptr<test> create_test(); { shared_ptr<test> p(new test()); return p; }…
1..Net框架提供了接口来描述对象的顺序关系:IComparable 和IComparer. 2.IComparable 为类定义了自然顺序,实现IComparer接口的类可以描述其它可选的顺序 3.原因:避免在运行时默认比较关系的低效 4.IComparable接口只有一个方法:CompareTo()  ,建议进行如下的实现而不是实现一个Compareto公共方法接受的却是object类型参数,因为这样会不停的装箱拆箱 注意:IComparable.CompareTo()是一个隐式的接口实现…
1.回调的场景:我给了儿子一个任务且他可以报告状态来(重复的)打断我.而我在等待他完成任务的每一个部份时不用阻塞我自己的进程.他可以在有重要(或者事件)状态报告时,可以定时的打断我,或者向我询求帮助 我:“儿子,到院子里除草去,我要看会书.” 斯科特:“爸,我已经打扫过院子了.” 斯科特:“爸,我已经把草放在除草机上了.” 斯科特:“爸,除草机不能启动了.” 我:“让我来启动它.” 斯科特:“爸,我做好了.” 2.回调就是用于异步的提供服务器与客户之间的信息反馈.它们可能在多线程中,或者可能是简…
1.建议避免使用new修饰符来重新定义非虚函数. 非虚方法是静态绑定的,不管哪里的代码也不管在哪里引用, 它总是严格的调用类中所定义的函数.并不会在运行时在 派生类中查找不同的版本. 2.何时使用new?基类与派生类都已经存在了,是后来添加的继承关系, 结果在添加继承关系时,发现两个类中使用了同样的方法名,那么就可以在派生类中添加一个new来解决 3.…
此篇是对00中第3点的再一次阐述. 1.如果一个属性返回一个引用类型,那么调用者就可以访问这个对象的公共成员,也包括修改这些属性的状态. public class MyBusinessObject { // Read Only property providing access to a private data member: private DataSet _ds; public DataSet Data { get { return _ds; } }} // Access the data…
1.继承就是说它是某物(is a的关系),针对相关类,而接口是说它有某个功能(behaves like.)可以是不相关的 基类是描述对象是什么,接口描述对象有某种行为. 2.不能在接口里提供任何成员的具体实现.只是定义属性,事件和索引器等. 抽象基类可以为派生类提供一些具体的实现,另外也描述了一些公共的行为. 一个接口可以被任意多个不相关的类型实现.比起在基类中编码,实现接口的编码可以在开发人员中提供更强的伸缩性. 3.接口做参数和返回值:让方法的参数和返回值使用接口,可以让程序具有通用性,而且…
1.如下这段代码会经历装箱和拆箱.例如25会先装箱成object后传递给writeline方法(一次拷贝),在方法内部又 经历拆箱成int(第二次拷贝)后然后调用tostring(). Console.WriteLine("A few numbers:{0}, {1}, {2}", 25, 32, 50); 所以建议这种写法:只经历一次装箱 Console.WriteLine("A few numbers:{0}, {1}, {2}", 25.ToString(),…