练习7.36:下面的初始值是错误的,请找出问题所在并尝试修改它。
struct X { X (int i, int j): base(i), rem(base % j) { } int rem, base; };
【出题思路】
本题旨在考查使用构造函数初始值列表时成员的初始化顺序,初始化顺序只与数据成员在类中出现的次序有关,而与初始值列表的顺序无关。
【解答】
在类X中,两个数据成员出现的顺序是rem在前,base在后,所以当执行X 对象的初始化操作时先初始化rem。如上述代码所示,初始化rem要用到base的 值,而此时base尚未被初始化,因此会出现错误。该过程与构造函数初始值列表中 谁出现在前面谁出现在后面没有任何关系。
修改的方法很简单,只需要把变量rem和base的次序调换即可,形式是:
struct X { X (int i, int j) : base (i), rem(base % j) { } int base, rem; };
本页共22段,961个字符,1457 Byte(字节)