使用VC6打开考生文件夹下的工程test2_1,此工程包含一个源程序文件test2_1.cpp,但该程序运行有问题,请改正程序中的错误,使该程序的输出结果如下:
调用基类BASE的构造函数:1
调用基类BASE的构造函数:2
调用派生类A的构造函数:3
调用派生类A的析构函数
调用基类BASE的析构函数
调用基类BASE的析构函数
源程序文什test2_1.cpp清单如下:
#include<iostream.h>
class BASE
public:
BASE(int i)cout<<"调用基类BASE的构造函数:"<<i<<endl;
~BASE()cout<<"调用基类BASE的析构函数"<<endl;)
/***************** found *****************/
class A:public BASE
public:
/***************** found *****************/
A(int a,int b):i(a),b(b)
cout<<"调用派生类A的构造函数:"<<a+b<<endl;
~A()cout<<"调用派生类A的析构函数"<<endl;)
private:
BASE b;
;
void main()
/****************found***************/
BASE obj(1,2);
参考答案:(A)错误:类BASE的定义缺少“;”
正确:};
(B)错误:A(int a,int b):i(a),b(b)
正确:A(inta,int b):BASE(a),b(b)
(C)错误:BASE obj(A,B);
正确:A obj(A,B);
解析:
(1)主要考查考生对于类的定义的掌握,类定义结束后大括号外面不能缺少分号;
(2)主要考查考生对于派生类构造函数的掌握,该函数应该实现将参数传递给基类的功能,即派生类的构造函数应使用参数列表的形式将基类的数据成员初始化,初始化的时候直接使用基类的名称(BASE)而不是基类中变量的名称(i);
(3)主要考查考生对于基类和派生类函数调用关系的掌握,要调用派生类的构造函数必须使用派生类的对象,构造函数只有在该类的对象被使用的时候才会被调用。