使用VC6打开考生文件夹下的工程test1_1,此工程包含一个源程序文件test1_1.cpp,但该程序运行有问题,请改正main函数中的错误,使该程序的输出结果如下:
Constructor called.
Default constructor called.
Area is 6
Area is 0
Area is 6
源程序文件test1_1,cpp清单如下:
#include<iostream.h>
class RectAngle
private:
double ledge,sedge;
public:
RectAngle()
cout<<"Default constructor called.";
RectAngle(double l,double s)
ledge=l;sedge=s;
cout<<"Constructor called.";
void Set(double l,double s)
ledge=l;sedge=s;
void Area()
cout<<"Area is"<<ledge*sedge<<endl;
;
void main()
/***************** found *****************/
RectAngle Rect1(2,3);
RectAngle Rect2(1);
/**************** found *****************/
RectAnglC Rect3;
Rectl.Area();
/***************** found *****************/
RecL2.lodge=0;Rect2.sedge=0;
Reck2.Area();
Rect3.Area();
参考答案:错误:RectB(A)
正确:RectB
(B)错误:RectC
正确:RectC(RectA)
(C)错误:RectB.Aedge=0;RectB.sedge=0;
正确:RectB.Set(0,0);
解析:
(1)主要考查考生对于重载构造函数调用的理解,Rect2应该调用缺省构造函数,这里重载的构造函数是以参数个数不同区分的;一个是缺省的构造函数,即没有参数的;另一个含有两个参数,为了能使“Default constructor called.”输出,应该调用不含有参数的缺省构造函数;
(2)主要考查考生是否会使用缺省的拷贝初始化构造函数,这是不出现构造函数被调用语句的惟一方法,不管使用缺省的构造函数还是含有两个参数的构造函数都会在屏幕上出现多余的文字,而这些文字只有使用在类中没有被定义的缺省拷贝初始化构造函数来声明一个新的对象才不会出现,根据提示应该使用Rect1这个已有的对象去初始化Rect3这个新的对象,这就是拷贝初始化构造函数的作用,即使用已有的或者已存在的对象去初始化一个新的对象;
(3)主要考查考生对于类的对象访问权限的掌握,ledge和sedge为类的私有成员,不能被类的对象Rect2访问,应使用成员函数Set()。