1、
如果程序员想允许不属于当前结构的一个成员函数存取结构中的数据,那该怎么办呢?他可以在s t r u c t内部声明这个函数为友元。注意,一个友元必须在一个 s t r u c t内声明,这一点很重要,因为他(和编译器)必须能读取这个结构的声明以理解这个数据类型的大小、行为等方面的规则。
2、在C + +中,定义和初始化是同一概念,不能只取其中之一。
3、构造函数和析构函数是两个非常特殊的函数:它们没有返回值。这与返回值为 v o i d的函数显然不同。后者虽然也不返回任何值,但我们还可以让它做点别的。而构造函数和析构函数则不允许。在程序中创建和消除一个对象的行为非常特殊,就像出生和死亡,而且总是由编译器来调用这些函数以确保它们被执行。如果它们有返回值,要么编译器必须知道如何处理返回值,要么就只能由用户自己来显式地调用构造函数与析构函数,这样一来,安全性就被破坏了。
4、析构函数的语法与构造函数一样,用类的名字作函数名。然而析构函数前面加上一个 ~,以和构造函数区别。另外,
析构函数不带任何参数,因为析构不需任何选项。下面是一个析构函数的声明:
class Y {
p u b l i c :
~ Y ( ) ;
} ;
5、一般说来,应该在
尽可能靠近变量的使用点定义变量,并在定义时就初始化(这是对预定义类型的一种建议,但在那里可以不做初始化)。这是出于安全性的考虑,减少变量误用的可能性。另外,程序的可读性也增强了,因为读者不需要跳到程序头去确定变量的类型。
6、函数重载,通过范围和参数,不能通过返回值
7、缺省参数是在函数声明时就已给定的一个值,如果我们在调用函数时没有指定这一参数的值,编译器就会自动地插上这个值。我们可以把:
stash(int Size);// zero quantity
stash(int Size,int Quantity);
用一个函数声明来代替
stash(int Size, int Quantity=0);
这样,s t a s h ( i n t )定义就简化掉了——所需要的是一个单一的s t a s h ( i n t , i n t )定义。
现在这两个对象的定义
stash A(100),B(100,0);
将会产生完全相同的结果。它们将调用同一个构造函数,但对于 A,它的第二个参数是由编译
器在看到第一个参数是整型而且没有第二个参数时自动加上去的。
posted on 2006-12-06 16:07
happytian 阅读(150)
评论(0) 编辑 收藏