问答题 请使用VC6或使用[答题]菜单打开考生文件夹proj1下的工程proj1,其中在编辑窗口内显示的主程序文件中定义有类ABC和主函数main。程序文本中位于每行“//ERROR****found****”之后的一行语句有错误,请加以改正。改正后程序的输出结果应该是: 21 23 注意:只修改每个“//ERROR****found****”下面的一行,不要改动程序中的其他任何内容。 #include <iostream> using namespace std; class ABC { public: //ERROR **********found********** ABC() {a=0; b=0; c=0;} ABC(int aa, int bb, int cc); void Setab() {++a, ++b;} int Sum() {return a+b+c;} private: int a,b; const int c; }; ABC::ABC (int aa, int bb, int cc):c(cc) {a=aa; b=bb;} int main () { ABC x(1, 2, 3), y(4, 5, 6); ABC z, *w=&z; w->Setab(); // ERROR **********found********** int s1=x. Sum()+y->Sum(); cout <<s1<<"; // ERROR **********found********** int s2 =s1 +w.Sum(); cout <<s2 <<endl; return 0; }
【正确答案】(1)ABC():a(0),b(0),c(0){} (2)int s1=x.Sum()+y.Sum(); (3)int s2=s1+w->Sum();
【答案解析】[考点] 本题考查的是ABC类,其中涉及构造函数、成员函数和常变量私有成员。构造函数中因为要给常变量私有成员初始化,所以必须使用成员列表初始化来赋初值。只有类的指针在调用成员函数时才使用标识符“->”。 [解析] (1)主要考查考生对构造函数的掌握情况,根据私有成员的定义:const int c;可知,c为常变量,因此构造函数必须使用成员列表初始化来给c赋初始值。 (2)主要考查考生对类的指针的掌握情况,根据主函数的第一条语句:ABC x(1,2,3),y(4,5,6);可知,x和y都是ABC类,但不是指针,因此它们调用ABC类的成员函数要使用标识符“.”,而不是“->”。 (3)主要考查考生对类的指针的掌握情况,根据主函数的第二条语句:ABC z,*w=&z;可知,w是ABC类的指针,指向z,因此w调用ABC类的成员函数时要使用标识符“->”,而不是“.”。