使用VC6打开考生文件夹下的工程test41_3。此工程包含一个test41_3.cpp,其中定义了类Rectangle,但该类的定义并不完整。请按要求完成下列操作,将程序补充完整。(1)定义类Rectangle的私有数据成员left,top和fight,bottom,它们都是int型的数据。请在注释“//**1**”之后添加适当的语句。(2)添加类Rectangle的带四个int型参数1、t、r、b的构造函数的声明,并使这四个参数的默认值均为0,请在注释“//**2**”之后添加适当的语句。(3)添加类

题目

使用VC6打开考生文件夹下的工程test41_3。此工程包含一个test41_3.cpp,其中定义了类Rectangle,但该类的定义并不完整。请按要求完成下列操作,将程序补充完整。

(1)定义类Rectangle的私有数据成员left,top和fight,bottom,它们都是int型的数据。请在注释“//**1**”之后添加适当的语句。

(2)添加类Rectangle的带四个int型参数1、t、r、b的构造函数的声明,并使这四个参数的默认值均为0,请在注释“//**2**”之后添加适当的语句。

(3)添加类Rectangle的成员函数SetTop()参数为int型的t,作用为把t的值赋给类的数据成员top,添加类Rectangle的成员函数SetBottom()参数为int型的t,作用为把t的值赋给类的数据成员bottom,请在注释“//**3**”之后添加适当的语句。

(4)完成派生类Rectangle的成员函数Show()的定义,使其以格式“right-bottom point is(right,bottom)”输出,请在注释“//**4**”之后添加适当的语句。

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

include <iostream.h>

class Rectangle

{

// ** 1 **

int right, bottom;

public:

// ** 2 **

~ Rectangle(){};

void Assign(int 1, int t, int r, int b);

void SetLeft(int t){left = t;}

void SetRight(int t){right = t;}

// ** 3 **

void SetBottom(int t){bottom = t;}

void Show();

};

Rectangle::Rectangle(int 1, int t, int r, int b)

{

left = 1; top = t;

right = r; bottom = b;

}

void Rectangle::Assign(int 1, int t, int r, int b)

{

left = 1; top = t;

right = r; bottom = b;

}

void Rectangle::Show()

{

cout<<"left-top point is ("<<left<<","<<top<<")"<<'\n';

// ** 4 **

}

void main()

{

Rectangle rect;

rect.Show();

rect.Assign(100,200,300,400);

rect.Show();

}


相似考题
更多“使用VC6打开考生文件夹下的工程test41_3。此工程包含一个test41_3.cpp,其中定义了类Rectangle,但 ”相关问题
  • 第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打开考生文件夹下的工程RevProj15。此工程包含一个源程序文件RevMain15.cpp,但该程序中类的定义有错误。请改正程序中的错误,使它能得到正确结果。

    注意,不要改动主函数,不得删行或增行,也不得更改程序的结构。

    源程序文件RevMain15.cpp中的程序清单如下:

    //RevMain15.cpp

    include<iostream>

    using namespace std;

    class Sample

    {

    private:

    int x;

    static int y;

    public:

    Sample(int a)

    {

    x=a;

    y+=x;

    }

    static void print(Sample s)

    {

    cout<<"x="<<x<<<<",y="<<y<<end1;

    }

    Sample::y=5;

    int main()

    {

    Sampel s1(10);

    Sample s2(15);

    Sample::print(s1);

    Sample::print(s2);

    return 0;

    }


    正确答案:

  • 第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打开考生文件夹下的工程test1_1,此工程包含一个源程序文件test1_1.cpp,但该程序运行有问题,请改正main函数中的错误,使该程序的输出结果如下:

    Constructor called.

    Default constructor called.

    Area is 6

    Area is 0

    Area is 6

    源程序文件test1_1,cpp清单如下:

    include<iostream.h>

    class RectAngle

    {

    private:

    double ledge,sedge;

    public:

    RectAngle()

    {

    cout<<"Default constructor called.";

    }

    RectAngle(double l,double s)

    {

    ledge=l;sedge=s;

    cout<<"Constructor called.";

    }

    void Set(double l,double s)

    {

    ledge=l;sedge=s;

    }

    void Area()

    {

    cout<<"Area is"<<ledge*sedge<<endl;

    }

    };

    void main()

    {

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

    RectAngle Rect1(2,3);

    RectAngle Rect2(1);

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

    RectAnglC Rect3;

    Rectl.Area();

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

    RecL2.lodge=0;Rect2.sedge=0;

    Reck2.Area();

    Rect3.Area();

    }


    正确答案:(1)错误:Rect2(1) 正确:Rect2 (2)错误:Rect3 正确:Rect3(Rect1) (3)错误:Rect2.1edge=0;Rect2.sedge=0; 正确:Rect2.Set(00);
    (1)错误:Rect2(1) 正确:Rect2 (2)错误:Rect3 正确:Rect3(Rect1) (3)错误:Rect2.1edge=0;Rect2.sedge=0; 正确:Rect2.Set(0,0); 解析:(1)主要考查考生对于重载构造函数调用的理解,Rect2应该调用缺省构造函数,这里重载的构造函数是以参数个数不同区分的;一个是缺省的构造函数,即没有参数的;另一个含有两个参数,为了能使“Default constructor called.”输出,应该调用不含有参数的缺省构造函数;
    (2)主要考查考生是否会使用缺省的拷贝初始化构造函数,这是不出现构造函数被调用语句的惟一方法,不管使用缺省的构造函数还是含有两个参数的构造函数都会在屏幕上出现多余的文字,而这些文字只有使用在类中没有被定义的缺省拷贝初始化构造函数来声明一个新的对象才不会出现,根据提示应该使用Rect1这个已有的对象去初始化Rect3R个新的对象,这就是拷贝初始化构造函数的作用,即使用已有的或者已存在的对象去初始化一个新的对象;
    (3)主要考查考生对于类的对象访问权限的掌握,ledge和sedge为类的私有成员,不能被类的对象Rect2访问,应使用成员函数Set()。

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