问答题 使用VC++6.0打开 下的源程序文件1.cpp,该程序运行时有错误,请改正其中的错误,使程序正确运行,并且使程序输出的结果为
OK
注意:错误的语句在//******error******的下面,修改该语句即可。
试题程序:
#include<iostream.h>
class TC
{
public:
TC()
{
a=b=0;
}
private:
int a,b;
};
class TC1:public TC
{
public:
TC1()
{
}
//******error******
virtual void func();
};
class TC2:public TC1
{
public:
TC2()
{
a=0;
b=0;
}
void func()
{
//******error******
cout<<"OK"<endl;
}
private:
int a;
int b;
};
void main()
{
TC2 obj;
//******error******
TC1 * p=(TC1 *)obj;
p->func();
}
【正确答案】
【答案解析】(1)应改为“virtual void func()=0;”。
(2)应改为“cout<<"OK"<<endl;”。
(3)应改为“TC1 * p=(TC1 *) &obj;”。
答案考生文件夹 [解析] 本题中TC1类中的func函数是纯虚函数,纯虚函数的定义格式为virtual<函数类型><函数名>(<参数表>)=0”,因此第1处的语句应为“virtual void func()=0;”。func函数没有参数表。编译程序后发现第2处的语句有错误,cout流中的数据是用流插入运算符“<<”顺序加入的,因此“<”不正确,应改成“cout<<"OK"<<endl;”。函数的调用方式有2种:非多态调用和多态调用,非多态调用是指不使用指针或引用的直接调用,多态调用是指通过对象的指针或引用的调用。在主函数中定义了TC1 *P,P是指向基类TC1的指针,因此是多态调用方式,即通过对象的指针来调用,应该把派生类对象的地址赋给P,而不是对象名,因此第3处的语句应改为“TC1 *P=(TC1 *)&obj;”。