网志档案列表:11 / 2005

Effective C++ Note 26: Guard against potential ambiguity @ 11/28/2005

Potential ambiguity may occur in function overloading and multiple inheriting. [code]void f(char); void f(int); class Base1...
发布于 11/28/2005 22:09:45 | 评论:0

一夜狂风 @ 11/28/2005

昨夜持续的狂风,把宿舍外两排杨树括得沙沙乱响,无眠。 清晨起床,发现六教旁边的杨树叶子都掉光了。风把北京特色的浓雾驱散,露出难得一见的太阳。阳光穿过光秃秃的树叉打在人身上,生起一点暖意,可是一下又被狂风带走,说不尽的诡异…… ...
发布于 11/28/2005 9:20:38 | 评论:0

Effective C++ Note 25: Avoid overloading on a pointer and a numberical type @ 11/27/2005

What will happen here? [code]void f(int x){cout<<"int"<<endl;}; void f(string * x){cout<<"string"<<endl;}; void main(){ ...
发布于 11/27/2005 14:51:40 | 评论:0

Effective Note 24: function overloading vs parameter defaulting @ 11/26/2005

The confusion over function overloading and parameter defaulting stems from the fact that they both allow a single function name...
发布于 11/26/2005 22:46:06 | 评论:0

Effective C++ Note 23: Don't try to return a reference when you must return an object @ 11/25/2005

Consider operator+ which always return an object. [code]class C{ C operator + (const C & rhs){ C retval; ...
发布于 11/25/2005 22:38:49 | 评论:0

Effective C++ Note 22: Prefer pass-by-reference to pass-by-value @ 11/24/2005

1. efficiency If you pass an object by value, then inside the function, a copy of the object will be created, which may be rath...
发布于 11/24/2005 23:08:04 | 评论:0

Effective C++ Note 21: Use const whenever possible @ 11/23/2005

Where to use const? [code]const char * a; // const data, non-const pointer char const * a; // same as const char * a char * c...
发布于 11/23/2005 16:20:01 | 评论:0

Effective C++ Note 20: Avoid data members in the public interface @ 11/22/2005

1. for constency If everything in the public interface are functions, clients of your classes won't have to remember whether ...
发布于 11/22/2005 19:56:16 | 评论:0

Effective C++ Note 19: member functions, non-member functions and friend functions @ 11/21/2005

main points: 1. Virtual functions must be member functions. 2. Operator >> and << are never member functions. 3. Only non-mem...
发布于 11/21/2005 22:36:37 | 评论:0

Effecitve C++ Note 18: Strive for class interfaces that are complete and minimal @ 11/20/2005

Complete here means that the clients who use the class can do all reasonable things to the class through the interfaces. And min...
发布于 11/20/2005 11:05:09 | 评论:0

一些忠告 @ 11/20/2005

多吃些粗粮。 给别人比他们自己期许的更多,并且用心去做 熟记你喜欢的诗歌 不要轻信你听到的每件事,不要花光你的所有,不要想睡多久就睡多久。 无论何时说“我爱你”,请真心实意。 无论何时说“对不起”,请看着对方的眼睛。 相信一见钟情。 永远不要...
发布于 11/20/2005 10:15:10 | 评论:0

Effective C++ Note 17: Check for assignment to self in operator= @ 11/19/2005

Consider the following code: [code]String a; String & b=a; a=b;[/code] This seems silly, but it is totally legal, and if you...
发布于 11/19/2005 17:35:59 | 评论:0

Effective C++ Note 16: assign to all data members in operator = @ 11/18/2005

When we overload the operator =, it is important that we assign to all data members. This may seem easy when the class is not d...
发布于 11/18/2005 16:40:16 | 评论:0

Effective C++笔记15: 让 operator = 返回一个指向 *this 的引用 @ 11/17/2005

对一个类 C 来说,正确的 operator = 格式应该是这样的: [code]C & C::operator = (const C & rhs){ ... return *this; }[/code] 为什么不返回 voi...
发布于 11/17/2005 10:42:42 | 评论:1

Effective C++ 笔记14: 将基类的析构函数声明为虚函数 @ 11/16/2005

把成员函数声明为虚函数的主要目的是为了支持多态,比如我们有一个基类 Shape 和一个派生类 Circle ,代码如下: [code]class Shape{ public: Shape(){}; virtual ~Shape(){...
发布于 11/16/2005 14:44:22 | 评论:0

Effective C++ 笔记13: 成员变量的初始化顺序 @ 11/15/2005

看看下面的代码: [code]template<class T> class Array { public: Array(int lowBound, int highBound); ... private: vector<T> d...
发布于 11/15/2005 19:55:45 | 评论:1

MM's PC repaired & Father of C++ coming to THU @ 11/15/2005

昨天带MM的机器去村里修了,主板挂了,稳压电容全数爆掉,精英的用料就是不行啊。把电容全换掉,花了80RMB,就几个电容啊,真贵,可是我又没那种装备,不能自己换…… 早上10:15有C++之父 Bjarne Stroustrup 的讲座,在清华FIT ...
发布于 11/15/2005 9:48:57 | 评论:0

Effective C++ 笔记12: 在 constructors 中对成员变量采取初始化而不要使用赋值 @ 11/14/2005

有时候我们会写这样的类: [code]template<class T> class NamedPtr { public: NamedPtr(const string& initName, T *initPtr); ... privat...
发布于 11/14/2005 13:55:44 | 评论:0

Effective C++ 笔记11: 为有指针成员的类重载 copy constructor 跟 operator = @ 11/13/2005

因为默认的 copy constructor 和 operator = 都只是简单的对每个成员变量进行拷贝,所以如果有指针变量,它会简单的拷贝指针的内容,造成两个指针指向同一个内存区域。 有一次我就忘了重载 copy constructor,搞了半天...
发布于 11/13/2005 23:41:55 | 评论:0

有点恐怖的感觉 @ 11/12/2005

今天吃晚饭的时候突然听到坐在我斜对面的人自言自语的说了几句话,我没听清,但我可以肯定他是在跟他自己说话。这已经是第n+1次在清华听到有人自言自语了。 因为现在的研究生大部分时间都跟机器在一起,根本就没什么跟人交流的机会,造成大部分研究生都有语言障碍,为了...
发布于 11/12/2005 18:11:38 | 评论:2

Effective C++ 笔记10: 在重载操作符 new 的同时重载 delete @ 11/12/2005

[b]为什么要重载 new 和 delete ?[/b] 最主要原因是因为默认的 new 和 delete 函数太慢了,它们要判断很多特殊情况,同时要防止内存碎片的产生……这些工作都是要花时间的。 另外,我们对一个指针进行 delete 操作时,d...
发布于 11/12/2005 17:57:53 | 评论:0

Effective C++ 笔记9: 重载操作符 new 时不要把“正常”的 new 格式给覆盖掉 @ 11/11/2005

如果我们重载了一个类的 operator new,那么我们对这个类进行 new 操作时就一定只会调用重载的 new 函数,看看下面的代码: [code]class A{ public: static void * operator new (...
发布于 11/11/2005 18:38:00 | 评论:0

Effective C++ 笔记8: 重载 new 和 delete 时要遵从的惯例 @ 11/10/2005

有时候我们会重载操作符 new 和 delete (为什么?现在我还没想明白为什么要这么干),这时就要遵从一些惯例。 [b]new 的惯例[/b] 操作符 new 必须接收返回一个 void * 指针,如果申请内存失败则要调用错误处理函数(前一次已经讲...
发布于 11/10/2005 11:50:25 | 评论:3

Effective C++ 笔记7: 对内存不足的处理 @ 11/9/2005

用 new 申请内存时有可能出现内存不足,从而导致申请失败的情况,这时就要采取相应的对策。大多数初学者都会觉得这没什么,毕竟有了虚拟内存技术,一般操作系统的可用内存都会在2G以上,不太可能出现内在不足,但这种可能毕竟是存在的,而一个好的程序就应该把所有可能...
发布于 11/9/2005 22:43:53 | 评论:2

Effective C++ 笔记6: 记得在析构函数中把指针类型的成员变量 delete 掉 @ 11/8/2005

很多类需要动态的使用内存,常见的做法是在类的 constructor 中用 new 申请内存,然后在 destructor 中用 delete 释放内存 但是随着类越写越大,有些人会把 delete 忘掉,以至于造成内存泄漏,要注意,一定要在析构函数中把...
发布于 11/8/2005 13:05:27 | 评论:0

Effective C++ 笔记5: 使用相同形式的 new 和 delete @ 11/7/2005

new 和 delete 有两种形式,带 [] 的和不带 [] 的 比如: [code]string *stringPtr1 = new string; // new without [] string *stringPtr2 = new st...
发布于 11/7/2005 11:38:33 | 评论:0

Effective C++ 笔记4: 用 // 代替 /* */ 做注释 @ 11/6/2005

理由: 1. 打 /**/ 太麻烦,不如 // 来得简单,在做少量注释(不超过一行)的情况下,用 // 能节省时间,而且代码看起来也整齐一点 2. /* 总是找与其最近的 */ 进行配对,所以下面的代码会出错: [code]if ( a > ...
发布于 11/6/2005 20:21:32 | 评论:0

Effective C++ 笔记3: 用 new和delete 代替 malloc和free @ 11/5/2005

malloc和free 是C时代的东西,因此他们并不知道什么是constructors,什么是destructors,这就是它们跟 new/delete 的区别 用malloc分配内存,它的单元不会被初始化,这对一些类来说是不可想像的,比如一个链表的...
发布于 11/5/2005 18:02:13 | 评论:0

Effective C++ 笔记2: 用<iostream>代替<stdio.h> @ 11/4/2005

我想大部分用C++的人都会喜欢 cout 和 cin 吧,比 scanf 和 printf 要简单多了。 scanf 和 printf 的一个致命缺点就是得使用变量的指针(printf要用吗?我忘了,好久不用了),另一个就是把输入输出的格式跟变量混在一起...
发布于 11/4/2005 13:10:52 | 评论:3

Effective C++ 笔记1: 用const和inline代替define @ 11/3/2005

define的使用一般有几种情况: 1. 用来定义常量,如 [code]#define pi 3.1415926[/code] 2. 用来定义小函数,如 [code]#define max(a,b) ((a) > (b) ? (a) : (b))...
发布于 11/3/2005 14:13:02 | 评论:0