使用VC++6.0打开考生文件夹下的源程序文件1.cpp,该程序运行有问题,请改正main函数中的错误,使程序的输出结果为: number=1 number=10 number=100 注意:不要改动main函数,不能增加或删除行。也不能更改程序的结构,错误的语句在//******error******的下面。 试题程序: include<iostream.h> classTC { public: TC(inti) { number=i; } voidSetNumber(intm) { number=m;

题目

使用VC++6.0打开考生文件夹下的源程序文件1.cpp,该程序运行有问题,请改正main函数中的错误,使程序的输出结果为: number=1 number=10 number=100 注意:不要改动main函数,不能增加或删除行。也不能更改程序的结构,错误的语句在//******error******的下面。 试题程序: include<iostream.h> classTC { public: TC(inti) { number=i; } voidSetNumber(intm) { number=m; } intGetNumberconst { returnnumber; } voidPrintconst { cout<<"number="<<number<<endl; } private: intnumber; }; voidmain { //********error******** TCobjl; objl.Print; TCobj2(3); //********error******** objl.number=10; //********error*‰****** TC.SetNumber(100); objl.Print; obj2.Print; }


相似考题
更多“使用VC++6.0打开考生文件夹下的源程序文件1.cpp,该程序运行有问题,请改正main函数中的错误,使程 ”相关问题
  • 第1题:

    使用VC++6.0打开考生文件夹下的源程序文件1.cpp,该程序运行时有错误,请改正错误,使程序正常运行,并且要求最后一个catch必须抛出执行的任何异常。

    程序异常,输出信息为

    error

    O

    ERROR

    注意:不要改动main函数,不能增加或删除行,也不能更改程序的结构,错误的语句在//******error******的下面。

    试题程序:

    include<iostream.h)

    intmain

    {

    try

    {

    throw("error");

    }

    //********error********

    catch(chars)

    {

    cout<<s<<endl;

    }

    try

    {

    throw((int)0);

    }

    //********error********

    catch

    {

    cout<<i<<endl;

    }

    try

    {

    throw(O);

    throw("error");

    }

    //********error********

    catch

    {

    cout<<"ERROR"<<endl;

    }

    return0;

    }


    正确答案:

    (1)应改为“catch(char*s)”。

    (2)应改为“cateh(inti)”。

    (3)应改为“catch(…)”。

    【解析】本题中第1个标识前的异常抛出语句为“throw("error");”,其中的类型为字符串。所以对应的异常捕捉语句catch中应该符合这个类型,而程序中给出的语句“catch(chars)”是字符型的,所以第1处的语句修改为“catch(char*S)”。第2个标识前的异常抛出语句为“throw((int)0);”,其中的类型为int。对应的异常捕捉语句catch中应该符合这个类型,所以补充catch子句中的类型,否则如果找不到匹配的catch块,系统就会调用一个系统函数,使程序终止运行。即第2处的语句修改为“catch(inti)”。如果在catch子句中没有指定异常信息的类型,那么就用删节号“…”表示它可以捕捉任何类型的异常信息,即修改为“catch(…)”。


  • 第2题:

    使用VC6打开考生文件夹下的工程proj2。此工程包含一个源程序文件main2.cpp,但该程序运行有问题。请改正main函数中的错误。

    源程序文件main2.cpp清单如下:

    //main2.cpp

    include <iostream>

    using namespace std;

    class MyClass

    {

    public:

    MyClass(int m)

    {

    member=m;

    }

    ~MyClass() {}

    int GetMember()

    {

    return member;

    }

    private:

    int member;

    };

    MyClass MakeObject(int m)

    {

    MyClass *pMyClass=new MyClass(m);

    return *pMyClass;

    }

    int main ( )

    {

    int x=7;

    /************found**************/

    MyClass *myObj=MakeObject(x);

    /*************found*************/

    cout<<"My object has member"<<myObj.GetMember()<<end1;

    return 0;

    }


    正确答案:修改后的主函数为: int main() { int x=7; MyClass *myObj=&MakeObject(x); cout"My object has member"myObj->GetMember()end1; return 0; }
    修改后的主函数为: int main() { int x=7; MyClass *myObj=&MakeObject(x); cout"My object has member"myObj->GetMember()end1; return 0; } 解析:本题考核对象指针的应用。程序中出现了2个出错标识符,说明此程序有2处错误。
    第1处错误:“MyClass*myObj=MakeObject(x);”。myObj是对象指针,而函数 MakeObject( )的返回值是类MyClass的对象,所以应改为:“MyClass *myObj=&MakeObject(x);”。
    第2处错误:“cout"MyObject has member"myObj.GetMember()end1;”。对象指针使用方式有两种:“对象指针名->成员名;”和“(*对象指针名)成员名;”。显然上述语句的对象指针的使用方式是错误的。应改为“cout"My object has member"myObj->GetMember()end1;”,或者“cout"MyObject has member"(*myObj).GetMember()end1;”。

  • 第3题:

    使用VC++6.0打开考生文件夹下的源程序文件1.cpp,该程序运行时有错误,请改正其中的错误,使程序正确运行,并且使程序输出的结果为 0K 注意:错误的语句在//******error******的下面,修改该语句即可。 试题程序: include<iostream.h> classTC { public: TC { a=b=0: } private: inta,b; }; classTCl:publicTC { public: TC1 { } //******error****** virtualvoidfunc; }; classTC2:publicTCl { public: TC2 { a=0: b=0: } voidfunc { //******error****** cout<<"OK"<endl; } private: inta; intb; }; voidmain { TC20bj; //******error****** TCl*p=(TCl*)obj; p->func; }


    正确答案:
    (1)应改为“virtualvoidfunc=0;”。
    (2)应改为“cout<<"0K"<(endl;”。
    (3)应改为“TCl*p=(TCl*)&obj;”。
    【解析】本题中TCl类中的func函数是纯虚函数,纯虚函数的定义格式为virtual<函数类型><函数名>((参数表>)=0”,因此第1处的语句应为“virtualvoidfunc=0;”。func函数没有参数表。编译程序后发现第2处的语句有错误,cout流中的数据是用流插入运算符“<<”顺序加入的,因此“<”不正确,应改成“cout<<"0K"<<endl;”。函数的调用方式有2种:非多态调用和多态调用,非多态调用是指不使用指针或引用的直接调用,多态调用是指通过对象的指针或引用的调用。在主函数中定义了Tel*P,P是指向基类TCl的指针,因此是多态调用方式,即通过对象的指针来调用,应该把派生类对象的地址赋给P,而不是对象名,因此第3处的语句应改为“TCl*p=(TCl*)&obj;”。

  • 第4题:

    使用VC++6.0打开考生文件夹下的源程序文件1.cpp,该程序运行时有错,请改正错误,使得程序正确执行,并且输出以下语句: TC1:0 TC2 注意:不要改动main函数,不能增加或删除行,也不能更改程序的结构,错误的语句在//******error******的下面。 试题程序: include<iostream.h> structTC1 { TCl(inti=0) { m_i=i; } voidprint { cout<<"TCl:"<<m_i<<endl; } intm_i; }; classTC2 { public: TC2 { } voidprint { cout<<"TC2"<<endl: } //********error******** private: ~TC2 { } }; intmain { //********error******** TC1obj1; //********error******** TC20bj2; obj1.print; obj2.print; return0; }


    正确答案:
    (1)应改为“public:”。
    (2)应改为“TClobj1(0);”或“TClobjl;”。
    (3)应改为“TC20bj2;”。
    【解析】本题第1处的“private:~TC2”是析构函数,它不是私有的,所以这里应该删除“private:”或修改为“pub-lic:”。第2处的“TClobjl;”语句是定义一个TCl类型的对象objl,根据类TCl构造函数的定义“TCl(inti=o)”,知道存在整型参数,应该补充参数,或者只是先定义一个对象名,然后在使用时补充参数,即修改为“TClobjl(0);或TClobil;”。第3处的“TC20bj2;”语句修改为“TC20bj2;”。

  • 第5题:

    使用VC6打开考生文件夹下的工程test41_1,此工程包含一个源程序文件test41_1.cpp,但该程序运行有问题,请改正函数中的错误,使该程序的输出结果为:

    7

    源程序文件test41_1.cpp清单如下:

    include<iostream.h>

    class myclass

    {

    int a, b;

    public:

    /***************** found *****************/

    int sum(myclass x);

    void set_ab(int i, int j);

    }:

    /**************** found ****************/

    void myclass:set_ab(int i, int j)

    {

    a=i;

    b=j;

    }

    int sum (myclass x)

    {

    /***************** found ***************/

    x.a+x.b;

    }

    void main ( )

    {

    myclass n;

    n.set_ab (3, 4);

    cout <<sum(n)<<endl;

    }


    正确答案:(1) 错误:int sum(myclass x); 正确:friend int sum(myclass x); (2) 错误:void myclass:set_ab(int iint j) 正确:void myclass::set_ab(int iint j) (3) 错误:x.a+x.b; 正确:return x.a+x.b;
    (1) 错误:int sum(myclass x); 正确:friend int sum(myclass x); (2) 错误:void myclass:set_ab(int i,int j) 正确:void myclass::set_ab(int i,int j) (3) 错误:x.a+x.b; 正确:return x.a+x.b; 解析:(1)函数sum中含有对于myclass类的私有数据成员a和b的操作,而普通函数没有这样的权限,所以编译器会报错,只有把sum定义成该类的友元函数,这样根据友元函数可以访问该类的所有元素的规则,就可以正确地实现该函数:
    (2)函数的参数列表只能用于类的构造函数,对于构造函数,参数列表与在函数体内赋值是等价的,但是一般的类的成员函数只能使用函数体内赋值一种方法;
    (3)该函数的返回值为int型,所以计算之后的结果应该使用关键字return返回主函数,return返回值可以使用括号,也可以不使用,后面可以是表达式也可以是变量或者常量。