上一页 1 2 3 4 5 6 7 8 9 ··· 14 下一页
摘要: 条款24说过为什么惟有non-member函数才有能力“在所有实参身上实施隐式类型转换”。本条款将Rational和operator*模板化: template<typename T> class Rational{ Rational(const T& number = 0, const T& denominator = 1); ... 阅读全文
posted @ 2012-02-16 22:57 lidan 阅读(549) 评论(0) 推荐(0) 编辑
摘要: 所谓智能指针是“行为像指针”的对象,并提供指针没有的机能。 真实指针做的很好的一件事是,支持隐式转换。Derived class指针可以隐式转换为base class指针。指向non-const的对象的指针可以转换为指向const对象。下面是发生于三层继承体系的一些转换: class Top{...}; class Middle: public Top{...}; ... 阅读全文
posted @ 2012-02-15 22:41 lidan 阅读(479) 评论(0) 推荐(0) 编辑
摘要: template是节省时间和避免重复代码的一个奇妙方法。class template的成员函数只有在被使用时才被暗中具现化。function templates有类似的诉求。 但是如果你不小心,使用templates可能导致代码膨胀(code bloat):其二进制代码带着重复(或几乎重复)的代码、数据、或两者。其结果可能源码看起来合身整齐,但目标码却不是那么回事。你需要知道如何避免这样的... 阅读全文
posted @ 2012-02-15 20:50 lidan 阅读(505) 评论(0) 推荐(0) 编辑
摘要: 我们需要一个程序,传送信息到不同的公司去。信息要不译成密码,要不就是未加工的文字。如果编译期间我们有足够信息来决定哪一个信息传至那一家公司,就可以采用基于template的解法: class CompanyA{ public: void sendCleartext(const std::string& msg); void sendEncrypt... 阅读全文
posted @ 2012-02-15 15:02 lidan 阅读(462) 评论(0) 推荐(0) 编辑
摘要: template声明式中,class和typename这两个关键字意义完全相同 template<class T> class Widget; template<typename T> class Widget; 有时候你一定要用typename, 可以在template中指涉的两种名称: template <typename C> void print2n... 阅读全文
posted @ 2012-02-14 21:08 lidan 阅读(816) 评论(0) 推荐(0) 编辑
摘要: 面向对象编程世界总是以显示接口(explicit interface)和运行期多态(runtime polymorphism)解决问题。 class Widget{ public: Widget(); virtual ~Widget(); virtual std::size_t size() const; vi... 阅读全文
posted @ 2012-02-14 17:27 lidan 阅读(538) 评论(0) 推荐(0) 编辑
摘要: 一旦涉及多重继承(multiple inheritance;MI): 程序有可能从一个以上的base class继承相同名称(如函数、typedef等)。那会导致较多的歧义机会。例如: class BorrowableItem { public: void checkOut(); }; class ElectronicGadet { p... 阅读全文
posted @ 2012-02-14 15:53 lidan 阅读(519) 评论(0) 推荐(0) 编辑
摘要: c++中public继承视为is-a关系。现在看private继承: class Person{...}; class Student: private Person {...}; void eat(const Person& p); void study(const Student& s); Person p; Student s; e... 阅读全文
posted @ 2012-02-14 10:39 lidan 阅读(652) 评论(0) 推荐(0) 编辑
摘要: 复合(composition)是类型之间的一种关系,当某种类型的对象内含它种类型的对象,便是这种关系: class Address {...}; class PhoneNumber {...}; class Person { public: ... private: std::string name;//合成成分物 ... 阅读全文
posted @ 2012-02-12 20:36 lidan 阅读(480) 评论(0) 推荐(0) 编辑
摘要: 重新定义一个继承而来的non-virtual函数永远都是错误的,本条款的讨论限制在“带有缺省参数的virtual函数”。 virtual函数是动态绑定的,而缺省参数却是静态绑定。 对象的所谓静态类型,是它在程序中被声明时所采用的类型。 class Shape { public: enum ShapeColor {Red, Green, Blue}; ... 阅读全文
posted @ 2012-02-11 20:53 lidan 阅读(511) 评论(0) 推荐(0) 编辑
上一页 1 2 3 4 5 6 7 8 9 ··· 14 下一页