-
- 必须对任何const或引用类型成员以及没有默认构造函数的类类型的任何成员使用初始化式。有些成员必须在构造函数初始化列表中进行初始化。对于这样的成员,在构造函数函数体中对它们赋值不起作用。没有默认构造函数的类类型的成员,已经const或引用类型的成员,不管是哪种类型,都必须在构造函数初始化列表中进行初始化。
- 如果定义了其他构造函数,则提供一个默认构造函数几乎总是对的。通常,在默认构造函数中给成员提供的初始值应该指出该对象是“空”的。
- 初级程序员常犯的一个错误时:采用以下方式声明一个用默认狗仔函数初始化的对象:Sales_item myoblj();//这样是错误的,这会被编译器解释成一个函数的声明,这与我们的意图大相径庭!使用默认构造函数定义一个对象的正确方式是去掉最后的空括号:Sales_item myobj;
- 可以通过将构造函数声明为explicit,来防止在需要隐式转换的上下文中使用构造函数,explicit关键字只能用于类内部的构造函数声明上,在类的定义体外部所做的定义上不再重复它。通常,除非有明显的理由想要定义隐式转换,否则,单形参构造函数应该为explicit。将构造函数设置为explicit可以避免错误,并且当转换有用时,用户可以显示地构造对象。
- 对于没有定义构造函数并且其全体数据成员均为public的类,可以采用与初始化数组元素相同的方式初始化其成员:struct Data{ int ival;char *ptr;};Data vall={0,0};
- 友元机制允许一个类将对其非公有成员的访问权授予指定的函数或类。友元的声明以关键字friend开始。它只能出现在类定义的内部。友元声明可以出现在类中的任何地方:友元不是授予友元关系的那个类的成员,所以它们不受其声明出现部分的访问控制影响。通常,将友元声明成组地放在类定义的开始或结尾是个好主意
- 当我们在类的外部定义static成员时,无需重复指定static保留字,该保留字只出现在类定义体内部的声明处。因为static成员不是任何对象的组成部分,所以static成员函数不能被声明为const。static成员函数也不能声明为虚函数。static数据成员必须在类定义体的外部定义。不像普通的数据成员,static成员不是通过类构造函数进行初始化,而是应该在定义时进行初始化。保证对象正好定义一次的最好方法是将static数据成员的定义放在包含类的非内联成员函数定义的文件中。在类定义体外部引用类的static成员时,必须指定成员是在哪个类中定义的。然而,static关键字只能用于类定义体内部的声明中,定义不能标示为static。
时间: 2024-11-16 08:06:54