2012年11月21日

摘要: 7 模板与泛型编程条款41:了解隐式接口和编译期多态n classes和templates都支持接口和多态。n 对classes而言接口是显式的,以函数签名为中心。多态则是通过virtual函数发生于运行期。n 对template参数而言,接口是隐式的,奠基于有效表达式。多态则是通过template具体化和函数重载解析 发生于编译期。条款42:了解typename的双重意义n 声明template参数时,前缀关键字class和typename可互换。n 使用typename标识嵌套从属类型名称;但不得在base class lists或member initialization list内以它 阅读全文
posted @ 2012-11-21 22:41 ArcherXu 阅读(141) 评论(0) 推荐(0) 编辑
摘要: 6 继承与面向对象设计条款32:确定你的public继承塑模出is-a关系“public继承”意味is-a。适用于base classes身上的每一件事一定也适用于derived classes上,因为每一个derived classes对象也都是一个base class对象。条款33:避免遮掩继承而来的名称int x;void someFunc(){double x;cin>>x; //尽管someFunc的x是double,global x是int,但不要紧。C++名称遮掩规则仍会遮掩名称。即类型是否相同并不重要。}class Base{public: virtual void 阅读全文
posted @ 2012-11-21 22:41 ArcherXu 阅读(155) 评论(0) 推荐(0) 编辑
摘要: 5 实现条款26:尽可能延后变量定义式的出现时间尽可能延后变量的定义,直到非得使用该变量的前一刻为止,甚至应该尝试延后这份定义直到能够给它初值实参为止。如果这样,不仅能够避免构造和析构非必要对象,还可以避免无意义的default 构造行为。循环怎么办??//定义于循环外Widget w;for (int i = 0; i < n; ++i){w = …;}1个构造函数,1个析构函数,n个赋值操作//定义于循环内for (int i = 0; i < n; ++i){Widget w;}n个构造函数,n个析构函数具体取决于一个赋值成本和一组构造+析构成本的大小。条款27:尽量少做转型 阅读全文
posted @ 2012-11-21 22:40 ArcherXu 阅读(202) 评论(0) 推荐(0) 编辑
摘要: 4 设计与声明条款18:让接口容易被正确使用,不易被误用n 好的接口很容易被正确使用,不容易被误用。你应该在你的所有接口中努力达成这些性质 。n 促进正确使用的办法包括接口的一致性,以及与内置类型的行为兼容。n 阻止误用的办法包括建立新类型,限制类型上的操作,束缚对象值,以及消除客户的资源管理责任n tr1::shared_ptr支持定制型删除器。这可防范dll问题,可被用来自动解除互斥锁。条款19:设计class犹如设计type当你定义一个新class,你也就定义了一个新type。几乎每一个class都要求回答如下提问:新type的对象应该如何创建和销毁。2. 对象的初始化和对象的赋值有什么 阅读全文
posted @ 2012-11-21 22:39 ArcherXu 阅读(180) 评论(0) 推荐(0) 编辑
摘要: 3 资源管理条款13:以对象管理资源基于对象的资源管理方法,建立在C++对构造函数、析构函数、copying函数的基础之上,依赖c++的“析构函数自动调用机制”确保资源被释放。auto_ptr和 shared_ptr一个简单的基本实现,只反应其基本原理。template<typename _Tp>class auto_ptr{private: _Tp* _M_ptr;public:typedef _Tp element_type;explicit auto_ptr( element_type* __p = 0) :_M_ptr(__p) { }template<typenam 阅读全文
posted @ 2012-11-21 22:39 ArcherXu 阅读(225) 评论(0) 推荐(0) 编辑
摘要: 2 构造/析构/赋值运算条款05:了解C++默默编写并调用哪些函数编译器可以暗自为class创建 default构造函数,copy 构造函数,copy assignment操作符,以及析构函数。编译器产生的析构函数是个non-virtual,除非这个class的base class自身声明有virtual析构函数。class Empty{};好像你写下如下代码: class Empty{public:Empty(){..}Empty(const Emtpy& rhs){…}~Empty(){…}Empty& operator=(const Empty& rhs){…}} 阅读全文
posted @ 2012-11-21 22:38 ArcherXu 阅读(164) 评论(0) 推荐(0) 编辑
摘要: 1 让自己习惯C++条款01:视C++为一个语言联邦C++是多重范型编程语言,同时支持过程形式,面向对象形式,函数形式,泛型形式,元编程形式(什么是元编程?)的语言。 C++主要包括4部分:C, Object-Oriented C++, Template C++和STL。条款02:尽量以const, enum, inline替换#define1, 对于单纯变量最好以const对象或enums替换#defines.#define ASPECT_RATIO 1.653const double ASPECT_RATION = 1.653;常量定义式通常放在头文件中,若要在头文件内定义一个常量的cha 阅读全文
posted @ 2012-11-21 22:37 ArcherXu 阅读(206) 评论(0) 推荐(0) 编辑

2012年11月19日

摘要: QUnit 是 JavaScript单元测试框架。更加具体的介绍ref:http://qunitjs.com/下面是QUnit中的一段代码:(function() { function F() {} F.prototype = QUnit; QUnit = new F(); // Make F QUnit's constructor so that we can add to the prototype later QUnit.constructor = F;}());What does it mean? I don't know. 直接把代码copy进浏览器中进... 阅读全文
posted @ 2012-11-19 20:33 ArcherXu 阅读(203) 评论(0) 推荐(0) 编辑

导航