请使用VC6或使用【答题】菜单打开考生文件夹proj1下的工程proj1,此工程中含有一个源程序文件proj1.cpp。其中位于每个注释“//ERROR****found****”之后的一行语句存在错误。请改正这些错误,使程序的输出结果为: Base:Go

admin2019-06-07  39

问题 请使用VC6或使用【答题】菜单打开考生文件夹proj1下的工程proj1,此工程中含有一个源程序文件proj1.cpp。其中位于每个注释“//ERROR****found****”之后的一行语句存在错误。请改正这些错误,使程序的输出结果为:
Base:GoodLuck!
Derived:GoodLuck!
注意:只修改注释“//ERROR****found****”的下一行语句,不要改动程序中的其他内容。
//proj1.cpp
#include
#include
usingnamespacestd;
classBase
{
//ERROR********found********
private:
char*msg;
public:
Base(char*str)
{
//ERROR********found********
msg=newchar[strlen(str)];
strcpy(msg,str);
cout<<"Base:"<}
//ERROR********found********
~Base(){deletemsg;}
};
classDerived:publicBase
{
public:
Derived(char*sir):Base(str){}
voidShow(){tout<<"Derived:"<<
msg<};
intmain()
{
Derivedobj("GoodLuck!");
obj.Show();
return0;
}

选项

答案(1)protected: (2)msg = new char[strlen(str) + 1]; (3)~Base() { delete [] msg; }

解析 (1)主要考查保护成员,因为在Base类的派生类中直接调用了msg,所以这里应该是保护成员。
(2)主要考查考生对动态分配的掌握,由下一条语句:strcpy(msg,str)可知,程序要将字符串str复制给msg,因此要给msg分配空间,空间大小应该为str的长度加1。
(3)主要考查考生对析构函数的掌握,delete语句要加上标识符’[]’。
转载请注明原文地址:https://jikaoti.com/ti/EOA0FFFM
0

最新回复(0)