itgle.com

使用VC6打开考生文件夹下的工程proj2。此工程包含一个源程序文件main2.cpp,但该程序运行有问题。请改正main函数中的错误。源程序文件main2.cpp清单如下://main2.cppinclude <iostream>using namespace std;class MyClass{public:MyClass(int m){member=m;}~MyClass() {}int GetMember(){return member;}private:int member;};MyClass

题目

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

}


相似考题
更多“使用VC6打开考生文件夹下的工程proj2。此工程包含一个源程序文件main2.cpp,但该程序运行有问题。请 ”相关问题
  • 第1题:

    使用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)主要考查考生对于对象指针调用成员函数方法的掌握,必须使用符号“->”,而对象本身使用符号“.”。

  • 第2题:

    使用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返回值可以使用括号,也可以不使用,后面可以是表达式也可以是变量或者常量。

  • 第3题:

    使用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删除一个指针时,只需要直接把指针变量的名称写在后面。

  • 第4题:

    使用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中的成员,在它的友元类中访问它时应该使用作用域符“::”,本题的错误是使用了冒号。

  • 第5题:

    使用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>),……{派生类构造函数体>}”,所以应将“::”改为规定的“:”。