摘要: 条款45说明了如果没写赋值运算符的话,编译器就会为你生成一个,条款11则说明了为什么你会经常不喜欢编译器为你生成的这个赋值运算符,所以你会想能否有个两全其美的办法,让编译器生成一个缺省的赋值运算符,然后可以有选择地重写不喜欢的部分。这是不可能的!只要想对赋值过程的某一个部分进行控制,就必须负责做赋值过程中所有的事。实际编程中,这意味着写赋值运算符时,必须对对象的每一个数据成员赋值:代码Code h... 阅读全文
posted @ 2010-10-20 15:24 oayx 阅读(302) 评论(0) 推荐(0) 编辑
摘要: 有时,一个类想跟踪它有多少个对象存在。一个简单的方法是创建一个静态类成员来统计对象的个数。这个成员被初始化为0,在构造函数里加1,析构函数里减1。(条款m26里说明了如何把这种方法封装起来以便很容易地添加到任何类中,“my article on counting objects”提供了对这个技术的另外一些改进)设想在一个军事应用程序里,有一个表示敌人目标的类:代码Code ... 阅读全文
posted @ 2010-10-20 15:10 oayx 阅读(315) 评论(0) 推荐(0) 编辑
摘要: 顽固的pascal和ada程序员会经常想念那种可以任意设定数组下标上下限的功能,即,数组下标的范围可以设为10到20,不一定要是0到10。资深的c程序员会坚持一定要从0开始计数,但想个办法来满足那些还在用begin/end的人的这个要求也很容易,这只需要定义一个自己的array类模板:代码Code highlighting produced by Actipro CodeHighlighter (... 阅读全文
posted @ 2010-10-20 14:31 oayx 阅读(1125) 评论(0) 推荐(0) 编辑
摘要: 看这样一个模板,它生成的类使得一个名字和一个t类型的对象的指针关联起来。[代码](因为有指针成员的对象在进行拷贝和赋值操作时可能会引起指针混乱(见条款11),namedptr也必须实现这些函数(见条款2))在写namedptr构造函数时,必须将参数值传给相应的数据成员。有两种方法来实现。第一种方法是使用成员初始化列表:[代码]第二种方法是在构造函数体内赋值:[代码]两种方法有重大的不同。从纯实际应... 阅读全文
posted @ 2010-10-20 14:16 oayx 阅读(2703) 评论(0) 推荐(0) 编辑
摘要: 看下面一个表示string对象的类:// 一个很简单的string类代码 Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--classstring{public:  string(constchar*value);  ~string();...//没有拷... 阅读全文
posted @ 2010-10-20 13:48 oayx 阅读(698) 评论(0) 推荐(0) 编辑