问答题使用VC6打开考生文件夹下的源程序文件modil.cpp,该程序运行时有错误,请改正其中的错误,使程序正确运行。并且使程序输出的结果为:  OK  注意:错误的语句在//********error********的下面,修改该语句即可。

题目
问答题
使用VC6打开考生文件夹下的源程序文件modil.cpp,该程序运行时有错误,请改正其中的错误,使程序正确运行。并且使程序输出的结果为:  OK  注意:错误的语句在//********error********的下面,修改该语句即可。

相似考题
更多“问答题使用VC6打开考生文件夹下的源程序文件modil.cpp,该程序运行时有错误,请改正其中的错误,使程序正确运行。并且使程序输出的结果为:  OK  注意:错误的语句在//********error********的下面,修改该语句即可。”相关问题
  • 第1题:

    使用VC++6.0打开考生文件夹下的源程序文件1.cpp,该程序运行时有错误,请改正程序中的错误,使得程序输出为 10 TC1 注意:不要改动main函数,不能增加或删除行,也不能 更改程序的结构,错误的语句在//******error******的下面。 试题程序: include<iostream> classTC1 { public: TC1 { } //********error******** private: virtual~TC1 { usingnamespacestd; cout<<"TCl"<<endl; } }; classTC2:publicTC1 { public: //********error******** explicitTC2(inti) { m_i=i; } TC2&operator(inti) { this->m_i=i; } voidprint { //********error******** cout<<m_j<<endl; } private: intm_i; }; voidfun(TC2C1) { C1.print; } intmain { fun(TC2(10)); return0; }


    正确答案:
    (1)删除“private:”语句。
    (2)应改为“TC2(inti)”。
    (3)应改为“std::cout<<m_i<<std::endl;”或添加“usingnamespacestd;”。
    【解析】本题中第1处的“virtual~TC1”语句是TC1析构函数,不是私有函数,所以删除“private:”。第2处“ex-plicitTC2(inti)”构造函数语句中的“explicit”是禁止隐式转换。程序中无法实现对类TC2的直接使用,所以这里应该将其删除。即“TC2(inti)”。在第3处实现fun函数中m-i的标准输出,即在屏幕上输出10。在程序中用到C++标准库时,要使用std标准命名空间进行限定。cout为标准库函数,所以要声明cout是在命名空间std中定义的流对象,即“std::cout<<m_i<<std::endl;”或者添加“usingnamespacestd;”。

  • 第2题:

    使用VC++6.0打开考生文件夹下的源程序文件1.cpp,该程序运行时有错。请改正程序中的错误,使程序输出的结果为 100 37 32 注意:错误的语句在//******error******的下面,修改该语句即可。 试题程序: include<iostream.h> //******error****** voidmain { //******error****** intm=0142: //******error****** intn=0X27: intq=32; cout<<m<<endl; cout<<n<<endl; cout<<q<<endl; return; }


    正确答案:
    (1)“voidmain”。
    (2)“intm=0144;”。
    (3)“intn=OX25;”或“intn===0x25;”。
    【解析】本题主要考查了主函数定义及幂同进制之间的转换,包括十进制到八进制,十进制到十六进制。主函数定义的定义形式为“main”,函数名之后必须是一对括号,因此第1处应改为“voidmain”。cout输出默认是以十进制方式输出的,根据题目要求输出的结果可发现变量的初值不正确,十进制的100对应八进制的144,卡进制的37对应十六进制的25,因此2和3应分别改成“intm=0144;”,“intn=0×25;”或“intn=0×25;”。

  • 第3题:

    使用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(…)”。


  • 第4题:

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

    x=3 y=5 z=0

    8

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

    include<iostream.h>

    static int x=5;

    int z=0;

    int *add(int x,int y)

    {

    cout<<"X="<<X<<"y="<<y<<" Z="<<z<<endl;

    z=z+x+y;

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

    return z;

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

    };

    void main()

    {

    int y=5;

    int x=3;

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

    cout<<&(add(X,y))<<endl;

    }


    正确答案:(1)错误:return z; 正确:return &z; (2)错误:}; 正确:} (3)错误:cout&(add(xy))endl; 正确:cout*(add(xy))endl;
    (1)错误:return z; 正确:return &z; (2)错误:}; 正确:} (3)错误:cout&(add(x,y))endl; 正确:cout*(add(x,y))endl; 解析:(1)主要考查考生对于函数返回类型的掌握,该函数的返回值应该是指向int型的指针,所以应该将地址作为返回值:
    (2)主要考查考生对于类定义格式与函数定义格式区别的掌握,类的定义最后应该使用“;”而函数不需要用“;”;
    (3)主要考查考生对于有返回值的函数调用的掌握,函数定义是返回指针型的,调用的时候就应该使用取地址符号。

  • 第5题:

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

    A:no parameters

    B:int parameter

    A:no parameters

    B:int parameter

    C:int parameter

    源程序文件test29_1.cpp清单如下;

    include <iostream.h>

    class A

    {

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

    private:

    A(){ cout<<"A:no parameters\n";}

    A(int a) {cout<<"A: int parameter\n";}

    };

    class B:public A

    {

    public:

    B(int a){cout<<"B:int Parameter\n";}

    };

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

    class C:public B,public A

    {

    public:

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

    C(int a) ::B(a) {cout<<"C: int parameter\n"; )

    };

    void main ( )

    {

    B b(1);

    C c(2);

    }


    正确答案:(1)错误:private: 正确:public: (2)错误:class C:public Bpublic A 正确:class C:public B (3)错误:C(int a)::B(a){cout"C:int parameter\n";) 正确:C(int a):B(a){cout"C:int parameter\n";}
    (1)错误:private: 正确:public: (2)错误:class C:public B,public A 正确:class C:public B (3)错误:C(int a)::B(a){cout"C:int parameter\n";) 正确:C(int a):B(a){cout"C:int parameter\n";} 解析:(1)一个类的构造函数和析构函数可以由系统自动生成,也可以由用户提供,但构造函数和析构函数都必须是该类的公有成员函数,否则编译时将出现错误,不能被调用;
    (2)A已经是B的基类,C公有继承B,A也就成为了C的基类,根据程序的运行结果可知,C是要公有继承B;
    (3)派生类的构造函数,初始化基类的参数,调用基类的构造函数时,使用符号“:”,而不是“::”;

  • 第6题:

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

    The grade is 3

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

    include<iostream.h>

    class student

    {

    private:

    int grade;

    public:

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

    student(int thegra):(thegra){}

    ~student(){}

    int get_grade(){return grade;}

    };

    void main()

    {

    int thegra=3;

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

    student point=new student(thegra);

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

    cout<<"The grade is"<<point.get_grade()<<endl;

    delete point;

    }


    正确答案:(1)错误:student(int thegra):(thegra){} 正确:student(int thegra):grade(thegra){} (2)错误:student point=new student(thegra) 正确:student*point=new student(thegra); (3)错误:cout"The grade is"point.get_grade()endl; 正确:cout"The grade is"point->get_grade()endl;
    (1)错误:student(int thegra):(thegra){} 正确:student(int thegra):grade(thegra){} (2)错误:student point=new student(thegra) 正确:student*point=new student(thegra); (3)错误:cout"The grade is"point.get_grade()endl; 正确:cout"The grade is"point->get_grade()endl; 解析:(1)主要考查考生对于构造函数使用参数列表初始化数据成员的掌握,可以使用参数列表的形式,也可以在函数内部实现,不过参数赋值的双方都必须出现,本题的错误就在于并没有把参数赋值给数据成员;
    (2)主要考查考生对于使用指针申请动态空间的方法的理解,new运算符申请的空间返回值为指针类型,指针类型的定义是在变量名前加上“*”;
    (3)主要考查考生对于对象指针调用成员函数方法的掌握,必须使用符号“->”,而对象本身使用符号“.”。

  • 第7题:

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

    400

    40

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

    include <iostream.h>

    class Student

    {

    public:

    Student(int xx){x=xx;}

    virtual float calcTuition();

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

    private:

    int x;

    };

    float Student::calcTuition()

    {

    return float(x'x);

    }

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

    class GraduateStudent::public Student

    {

    public:

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

    GraduateStudent(int xx) ::Student(xx){}

    virtual float calcTuition();

    };

    float GraduateStudent::calcTuition()

    {

    return float(x*2);

    }

    void main()

    {

    Student s(20);

    GraduateStudent gs(20);

    cout<<s.calcTuition()<<end1;

    cout<<gs.calcTuition()<<end1;

    }


    正确答案:(1)错误:private: 正确:protected: (2)错误:class GraduateStudent::public Student 正确:class GraduateStudent:public Student (3)错误:GraduateStudent(int XX)::Student(xx){} 正确:GraduateStudent(int xx):Student(xx){}
    (1)错误:private: 正确:protected: (2)错误:class GraduateStudent::public Student 正确:class GraduateStudent:public Student (3)错误:GraduateStudent(int XX)::Student(xx){} 正确:GraduateStudent(int xx):Student(xx){} 解析:(1)本题考查点为派生类对基类成员的访问。派生类中的成员不能访问基类中的私有成员,只可以访问基类中的公有成员和保护成员。
    (2)派生类的一般格式“class派生类名>:继承方式1>基类名1>,……{派生类新定义成员>};”,所以应将“::”改为规定的“:”,“::”是作用域运算符,用来标识某个成员属于某个类。
    (3)派生类构造函数在类体内定义的一般格式“派生类名>:基类名1>(参数表1>),……{派生类构造函数体>}”,所以应将“::”改为规定的“:”。

  • 第8题:

    使用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; }


    正确答案:
    (1)应改为“TCobjl(1);”。
    (2)应改为“0bj1.SetNumber(10);”。
    (3)应改为“0bj2.SelNumber(100);”。
    【解析】本题第1处的“TCobjl;”语句是声明TC类的对象0bj1,根据TC类构造函数的定义TC(inti),存在整型参数,并且题目要求第一个输出结果两1,所以补全参数1,即第1处的“TCobjl(1);”。第2处处的“objl.number=10;”应该是调用成员函数SetNumber赋值。在C++中成员函数的使用形式应该是:对象名.成员函数,所以修改为“obj1.SetNumber(10);”。类是对象的抽象,而对象是类的具体实例。第3处“TC.SetNumber(100);”语句中的TC为类,并不是对象,这里应该使用定义的对象,即obj2,所以将语句修改为“obj2.SetNumber(100);”。

  • 第9题:

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

    My object has member 7

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

    include<iostream.h>

    class MyClass

    {

    public:

    MyClass(int mem){member=mem;}

    ~MyClass(){}

    int GetAge()const{ return member;}

    private:

    int member;

    };

    /*****+********+** found *************/

    void main()

    {

    int mem=7;

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

    MyClass myObj=MakeObject(mem);

    cout<<"My object has member"<<myObj->GetAge()<<endl;

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

    delete;

    }

    MyClass *MakeObject(int mem)

    {

    MyClass *pMyClass=new MyClass(mem);

    return pMyClass;

    }


    正确答案:(1)添加函数定义MyClass*MakeObject(int mem); (2)错误:MyClass myObj=MakeObject(mem); 正确:MyClass *myObj=MakeObject(mem); (3)错误:delete; 正确:delete myObj;
    (1)添加函数定义MyClass*MakeObject(int mem); (2)错误:MyClass myObj=MakeObject(mem); 正确:MyClass *myObj=MakeObject(mem); (3)错误:delete; 正确:delete myObj; 解析:(1)主要考查考生对于函数定义规则的理解,在使用前先定义,这是规定;
    (2)主要考查考生对于指针的掌握,因为函数返回值为指针,所以返回值必须赋值给一个指针类型的变量;
    (3)主要考查考生是否会使用delete释放空间,使用delete删除一个指针时,只需要直接把指针变量的名称写在后面。

  • 第10题:

    问答题
    使用VC6打开考生文件夹下的源程序文件modil.cpp,该程序运行时有错误,请改正程序中的错误,使得程序输出:  1,2,3,4,5,  注意:不要改动main函数,不能增行或删行,也不能更改程序的结构,错误的语句在//******error******的下面。

    正确答案: 1 public:TestClass(int i)
    2 int i(10);
    3 i--;
    解析:1.调试程序,错误提示类TestClass中的构造函数TestClass被定义为私有的,无法获得,因此这里应该改变类的访问修饰符为public,即“public:TestClass(int i)”。
    2.题目中要求输出结果为1,2,3,4,5,即循环5次。第三个标识处,while循环条件是i大于5。题干中要求不能删除i初始化中的括号,所以在括号中添加i的初始值。i要大于5且while循环要执行5次,所以i的初始值为10,而while循环中对i的操作应该是i--,这样第二个和第三个标示下应该是“int i(10);”和“i--”。
    解析: 暂无解析

  • 第11题:

    问答题
    使用VC6打开考生文件夹下的源程序文件modi1.cpp,该程序运行时有错误,请改正程序中的错误,使得程序输出:  number1=4.8   number2=93.6   number3=0.9  PRODUCT=404.352  注意:错误的语句在∥******error******的下面。修改该语句即可。其他的语句不能修改。

    正确答案: 1.修改为“double product=number1* number2 * number3;”
    2.修改为“cout<<number1=<<number1<<'\t'<<number2=<<number2<<'\t';”
    3.修改为“cout<<number3=<<number3<<'\t'<<endl;”
    解析:1.变量product没有定义,number1、number2和number3均为double型变量,product是这三个变量的乘积,其数据类型是double型,因此第1个标识下应将语句“product = number1 * number2 * number3;”修改为“double product = number1 * number2 * number3;”。
    2.cout流中的数据是用流插入运算符“<<”顺序加入的,第2个标识下是输出number1、number2和number3的值,各个数据之间用“<<”顺序加入,不能用“<”,第2个标识下应将语句“cout<<number1=<<number1<'\t'<<number2=<<number2<'\t';”修改为“cout<<number1=<<number1<<'\t'<<number2=<<number2<<'\t';”。
    3.输出“PRODUCT=404.352”在“number1=4.8 number2=93.6 number3=0.9”的下一行,因此在输出“number3=0.9”后应换行,故第3个标识下的语句应该添加换行符,语句修改为“cout<<number3=<<number3<<'\t'<<endl;”。
    解析: 暂无解析

  • 第12题:

    问答题
    使用VC6打开考生文件夹下的源程序文件modil.cpp,该程序运行时有错误,请改正程序中的错误。  本题的功能是:从键盘输入字符串s,然后输出字符串s中的字符个数。  注意:不要改动main函数,不能增行或删行,也不能更改程序的结构,错误的语句在//******error******的下面。

    正确答案: 1.std::cout<<″please input a string:″<<std::endl;
    2.using namespace std;
    解析:1.第1个标识实现在屏幕上输出“please input a string:”的提示语句。在程序中用到C++标准库时,要使用std标准命名空间进行限定。cout为标准库函数,所以要声明cout是在命名空间std中定义的流对象,即第1个标识下的“std::cout<<″please input a string:″<<std::endl;”。
    2.第2个标识下的“namespace std;”语句是使用标准命名空间std,格式应该为“using namespace std;”。
    解析: 暂无解析

  • 第13题:

    使用VC++6.0打开考生文件夹下的源程序文件1.cpp,但该程序运行有问题,请改正main函数中的错误,使该程序的输出结果正确。 程序输出: 8 8 注意:错误的语句在/********error********/的下面。修改该语句即可,其他的语句不能修改。 试题程序: include(iostream.h> classCO { public: /********error********/ staticintn=0: CO { n++: } ~CO { n--: } }: /********error********/ intCO::n; voidmain { COobj; COobj2[7]; CO*C=NULL: c=&obj: /********error********/ eout<<C.n<<endl; cout<<C0::n<<endl; }


    正确答案:
    (1)“staticintn=O”应改为“staticintn;”。
    (2)“intCO::n;”应改为“intCO::n=0;”。
    (3)“cout<<c.n<<endl;”应改为“cout<<c->n<<endl;”。
    【解析】本题要在屏幕上输出两个字符,首先要静态变量初始化,第1处应改为“staticintn;”,第2处要给n赋值,第3处输出时引用c的对象,应改为“cout<<c->n<<endl;”。

  • 第14题:

    请使用VC6或使用【答题】菜单打开考生文件夹projl下的工程projl,该工程含有一个源程序文件pn,jl.cpp。其中位于每个注释“//ERROR 木}}水found}}水木”之后的一行语句存在错误。请改正这些错误,使程序的输出结果为: The value is 10 注意:只修改注释“//ERROR **** found****”的下一行语句,不要改动程序中的其他内容。 //pmjl.cpp include<iostream> using namespace std; class MyClass{ int value; public: //ERROR********found********* void MyClass(int val):value(val){} int GetValueconst{return value;} void SetValue(int val); }; //ERROR********found******** inline void SetValue(int val){value=val;} int main MyClass obj(O); obj.SetValue(10); //ERROR********found********下列语句功能是输出obj的成员value的值 tout<<”The value is”<<obj.value<<endl: return 0; }


    正确答案:
    (1)MyClass(int val):value(val){}
    (2)void MyClass::SetValue(int val){value=val;}
    (3)cout“”The value is”“obj.GetValue“end1;

  • 第15题:

    使用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;”。

  • 第16题:

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

    Previous=9,Next=11

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

    include <iostream.h>

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

    void prevnext (int,int &,int&);

    int main ( )

    {

    int x=10,y,z;

    prevnext (x,y,z);

    cout << "Previous=" << y << ", Next=" << z<<end1;

    return 0;

    }

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

    void prevnext (int x, int prev, int next)

    {

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

    prev=x--;

    next=++x;

    }


    正确答案:(1)错误:在main()函数前缺少prevnext函数的声明 正确:void prevnext(intint &int &); (2)错误:void prevnext(int xint prevint next) 正确:void prevnext(int xint &prevint &next) (3)错误:prev=x--; 正确:prev=x-1;
    (1)错误:在main()函数前缺少prevnext函数的声明 正确:void prevnext(int,int &,int &); (2)错误:void prevnext(int x,int prev,int next) 正确:void prevnext(int x,int &prev,int &next) (3)错误:prev=x--; 正确:prev=x-1; 解析:(1)函数在使用前必须已经被定义,main()中调用prevnext函数,而该函数的实现在main()之后,所以在main()之前必须添加该函数的声明;
    (2)由运行结果可知,通过函数prevnext调动要改变main()中的实参值,所以prey和next都应为引用型参数:
    (3)由运行结果prev=x-1,而源程序的prev=x,x=x-1,这里涉及的是运算符的优先级问题。

  • 第17题:

    使用VC6打开考生文件夹下的工程test26_1,此工程包含一个源程序文件test26_1.cpp,但该程序运行有问题,请改正

    函数中的错误,使该程序的输出结果为:

    Values are: 1,2 and 3

    源程序文件test26_1.cpp清单如下;

    include <iostream.h>

    class CommonBase

    {

    public:

    int x;

    };

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

    class DeriveCommonA::public CommonBase

    {

    public:

    int y;

    };

    class DeriveCommonB:public CommonBase

    {

    public:

    int z;

    };

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

    class Overlapping:public DeriveCommonA; public DeriveCommonB

    {

    public:

    void Display()

    {

    cout<<"Values are: "<<DeriveCommonA::x<<", "<<y<<" and "<<z<<end1;

    }

    };

    int main ( )

    {

    Overlapping ov;

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

    ov.x=1;

    ov.y=2;

    ov.z=3;

    ov.Display();

    return 0;

    }


    正确答案:(1)错误:class DeriveCommonA::public CommonBase 正确:class DeriveCommonA:public CommonBase (2)错误:class Overlapping:public DeriveCommonA;public DeriveCommonB 正确:class Overlapping:public DeriveCommonApublic DeriveCommonB (3)错误:ov.x=1; 正确:ov.DeriveCommonA::x=1;
    (1)错误:class DeriveCommonA::public CommonBase 正确:class DeriveCommonA:public CommonBase (2)错误:class Overlapping:public DeriveCommonA;public DeriveCommonB 正确:class Overlapping:public DeriveCommonA,public DeriveCommonB (3)错误:ov.x=1; 正确:ov.DeriveCommonA::x=1; 解析:(1)主要考查考生对于派生类定义的理解,C++规定的继承格式是在类名的后面加冒号,之后是继承方式和继承类的名称,题目中错误的使用了作用域运算符;
    (2)主要考查考生是否掌握了多继承的定义,多继承的格式基本上和单继承相同,不过在多个基类之间应该使用逗号分开,题目中错误的使用了分号,分号在C++中是结束标志;
    (3)主要考查考生对于派生类的对象访问的掌握,x是类CommonBase的成员,如果不加限制的访问就会产生二义性,编译程序不知道这个x是A类的,还是B类的,所以必须使用作用域限制符“::”,为了解决这个问题可以使用虚基类。

  • 第18题:

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

    2

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

    include<iostream.h>

    class amount;

    class coins

    {

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

    enum units {penny, nickel, dime, quarter, half_dollar}

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

    class amount;

    };

    class amount

    {

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

    coins:units money;

    public:

    void setm();

    int germ();

    };

    void amount::setm()

    {

    money = coins::dime;

    }

    int amount::getm()

    {

    return money;

    }

    int main ( )

    {

    amount ob;

    ob.setm();

    cout << ob.getm()<<end1;

    return 0;

    }


    正确答案:(1) 错误;enum units{pennynickeldimequarterhalf_dollar} 正确:enum units {pennynickeldimequarterhalf_dollar}; (2) 错误:class amount; 正确:friend class amount; (3) 错误:coins:units money; 正确:coins::units money;
    (1) 错误;enum units{penny,nickel,dime,quarter,half_dollar} 正确:enum units {penny,nickel,dime,quarter,half_dollar}; (2) 错误:class amount; 正确:friend class amount; (3) 错误:coins:units money; 正确:coins::units money; 解析:(1)enum是枚举类型,units是本题中该类型的一个变量,后面为枚举表,大括号中为枚举符,枚举变量的值实际上是一个有名字的常量,所以它的定义结束时也需要一个分号;
    (2)类amount是类coins中定义的成员,要是想要访问coins类中的私有成员,把amount定义成普通的数据成员是不能做到的,只能把它定义成友元类,即可以访问coins类中的所有成员(提示:units是使用的默认定义,即私有成员);
    (3)units是类coins中的成员,在它的友元类中访问它时应该使用作用域符“::”,本题的错误是使用了冒号。

  • 第19题:

    使用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;”。

  • 第20题:

    使用VC++6.0打开考生文件夹下的源程序文件 1.cpp,该程序运行时有错误,请改正程序中的错误。本程序要求实现的功能为从键盘输入一个字符串,并将结果保存到文件1.txt中。 注意:不要改动main函数,不能增加或删除行,也不能更改程序的结构,错误的语句在 //******error******的下面。 试题程序: include<iostream> include<fstream> //********error******** usingstd; voidWriteFile(char*s) { ofstreamout1; //********error******** out1.open("1.txt",binary|app); for(inti=0;s[i]!=0;i++) { //********error******** out1.puts(s[i]); } out1.close; } voidClearFile { ofstreamout1; out1.open("1.txt"); out1.close; } intmain { chars[1024]; ClearFile; cout<<"pleaseinputastrin9:"<<endl; cin.getline(s,1024); WriteFile(s); return0; }


    正确答案:
    (1)应改为“usingnamespacestd;”。
    (2)应改为“outl.open("1.txt",ios::binary|ios::app);”。
    (3)应改为“out1.put(s[i]);”。
    【解析】本题第1处的“usingstd;”是在程序中引入标准命名空间std,对于C++中引入标准命名空间的格式,缺少namespace,所以第1处的语句修改为“usingnamespacestd;”。第2处,调用成员函数open中,输入、输出方式是在ios类中定义的,所以“out1.open("1.txt",binary|app);”语句缺少类ios,即第2处的语句修改为“out1.open("1.txt",ios::binary|ios::app);”。第3个标识应该用流成员函数put输出字符,所以第3处的语句修改为“out1.put(s[i]);”。

  • 第21题:

    请教:2016年计算机二级C++基础练习二简答题9如何解答?

    使用VC++6.0打开考生文件夹下的源程序文件1.cpp,该程序运行时有错,请改正其中的错误,使程序正常运行,即使程序在屏幕输出以下类似内容:

    0012FF6810012FF3C5

    0012FF6C20012FF444

    0012FF7030012FF4C3

    0023FF7440012FF542

    0012FF7850012FF5C1

    006AFDCC~006AFDEF数据可能因为机器的不同,程序输出的内容会有差异。只要相差为4的连续地址即可。

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

    试题程序:

    #include

    usingnamespacestd;

    intmain()

    {

    int*P,a[5]={1,2,3,4,5};

    double*q,b[5]={5.0,4.0,3.0,2.0,1.0);

    intx;

    P=a;

    q=b;

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

    for(x=0;x<=5;X++)

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

    cout<;< p="">

    (q+x)<;< p="">

    return0;

    }


      (1)应改为“for(x=0;x<5;x++)”。

      (2)应改为“cout<

      【解析】本题中根据数组a、b的定义。它们都有5个元素,而第1处的“for(x=0;x<=5;x++)”循环了6次,应该是5次,所以在第1处将其修改为“for(x=0;x<5;x++)”;第2处的P变量为指针型变量,p+x为糯向数组中第X个元素的地址,这里要输出的是存储单元的内容,所以使用“*”指针元素符,即修改为“cout<

  • 第22题:

    问答题
    使用VC6打开考生文件夹下的源程序文件modil.cpp,该程序运行时有错误,请改正其中的错误,使程序正常运行,并且输出以下结果:  4,5.  7,8  4,8.  注意:错误的语句在//******error******的下面,修改该语句即可。

    正确答案: 1.将语句“virtual void move(int a; int b)”修改为“virtual void move(int a, int b)”
    2.将语句“CObj1(int i, int j,int k):(i,j)”修改为“CObj1(int i, int j,int k):CObj0(i,j)”
    3.将语句“print();”修改为“CObj0::print();”
    解析:1.虚函数的声明方式为:virtual <类型说明符> <函数名>(<参数表>),参数表中各参数之间应该用逗号隔开,因此第1个标识下应改为“virtual void move(int a, int b)”。
    2.主函数调用构造函数CObj1时,传递了四个实参,完成对变量m、n、x和y的初始化,变量 x和y是基类CObj0的数据成员,初始化通过基类构造函数CObj0(int i,int j)来完成,第2个标识下应改为“CObj1(int i, int j,int k):CObj0(i,j)”。
    3.由程序运行结果可知标识3下执行基类的print()函数,需要通过类名来指定需要调用的print()函数,即第3个标识下应改为“CObj0::print();”。
    解析: 暂无解析

  • 第23题:

    问答题
    使用VC6打开考生文件夹下的源程序文件modi1.cpp,该程序运行时有错,请改正其中的错误,使程序正常运行,并使程序输出的结果为:  Max is 7  提示:max()函数实现找出两个数中的最大值,并作为函数值返回。  注意:错误的语句在∥******error******的下面,修改该语句即可。

    正确答案: 1.将语句“int max(int a, int b)”修改为“int max(int&a,int &b)”
    2.将语句“max(-3,n);”修改为“max(m,n);”
    解析:1.函数max采用的参数传递机制是传地址,因此第1个标识下应该将语句“int max(int a, int b)”修改为“int max(int&a,int &b)”。
    2.调用函数max,实参类型应为一个整型变量,第2个标识下应将语句“max(-3,n);”修改为“max(m,n);”。
    解析: 暂无解析