计算机二级

使用VC6打开考生文什夹下的工程test1_3。此工程包含一个test1_3.cpp,其中定义了类circle和column,其中column类由circle类protected派生,但两个类的定义并不完整。请按要求完成下列操作,将程序补充完整。(1)定义类circle的保护数据成员r和area,它们都是double型的数据。请在注释“//**1**”之后添加适当的语句。(2)添加类circle的无参数的构造函数,使circle对象的r默认值为0,请在汁释“//**2**”之后添加适当的语句。(3)添加派

题目

使用VC6打开考生文什夹下的工程test1_3。此工程包含一个test1_3.cpp,其中定义了类circle和column,其中column类由circle类protected派生,但两个类的定义并不完整。请按要求完成下列操作,将程序补充完整。

(1)定义类circle的保护数据成员r和area,它们都是double型的数据。请在注释“//**1**”之后添加适当的语句。

(2)添加类circle的无参数的构造函数,使circle对象的r默认值为0,请在汁释“//**2**”之后添加适当的语句。

(3)添加派生类column构造函数的定义,传入的参数为double型的height和radius,并将具分别赋值给数擗成员h和基类的r,请在注释“//**3**”之后添加适当的语句。

(4)完成派生类column的成员函数print的定义,使其以格式“r=_area=_”先输出半径r和底面积area,再以格式“h=_vol=_”输出高h和体积vol的值,请在注释“//**4**”之后添加适当的语句。

输山结果如下:

r=1 area=3.1416

h=2 vo1=6.2832

注意:除在指定的位置添加语句外,请不要改动程序中的其他语句。

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

include<iostream.h>

const double pi=3.1416;

class circle

{

protected:

//**1**

public:

//**2**

circle(double radius){ r=radius;}

void print()

{

area=r*r*pi;

cout<<"r="<<r<<" "<<"area="<<ared<<endl;

}

};

class column: protected circle

{

protected:

double h;

public:

//** 3 **

void print()

{

// ** 4 **

}

};

void main()

{

column col(1.0,2.0);

Col.print();

}

参考答案和解析
正确答案:(1) doubler; double area; (2) circle(){r=0;} (3) column(double radiusdouble height):circle(radius){h=height;} (4) circle::print(); cout"h="h" ""vol="area *hendl;
(1) doubler; double area; (2) circle(){r=0;} (3) column(double radius,double height):circle(radius){h=height;} (4) circle::print(); cout"h="h" ""vol="area *hendl; 解析:主要考查考生对于类的数据成员定义与成员函数构造的掌握,其中(3)使用了参数列表进行变量赋值,(4)使用作用域符::调用基类print函数。
如果没有搜索结果,请直接 联系老师 获取答案。
相似问题和答案

第1题:

编写程序。 (1)定义一个Circle类,其中包含一个用于求圆面积的方法。(2)定义一个长度为10的Circle类数组,该数组中每个元素均为Circle类对象,即半径不同的具体的圆。(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打开考生文件夹下的工程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)主要考查考生对于对象指针调用成员函数方法的掌握,必须使用符号“->”,而对象本身使用符号“.”。

第4题:

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

第5题:

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

调用基类BASE的构造函数:1

调用基类BASE的构造函数:2

调用派生类A的构造函数:3

调用派生类A的析构函数

调用基类BASE的析构函数

调用基类BASE的析构函数

源程序文什test2_1.cpp清单如下:

include<iostream.h>

class BASE

{

public:

BASE(int i){cout<<"调用基类BASE的构造函数:"<<i<<endl;}

~BASE(){cout<<"调用基类BASE的析构函数"<<endl;)

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

}

class A:public BASE

{

public:

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

A(int a,int b):i(a),b(b)

{cout<<"调用派生类A的构造函数:"<<a+b<<endl;}

~A(){cout<<"调用派生类A的析构函数"<<endl;)

private:

BASE b;

};

void main()

{

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

BASE obj(1,2);

}


正确答案:(1)错误:类BASE的定义缺少“;” 正确:}; (2)错误:A(int aint b):i(a)b(b) 正确:A(intaintb):BASE(a)b(b) (3)错误:BASE obj(12); 正确:A obj(12);
(1)错误:类BASE的定义缺少“;” 正确:}; (2)错误:A(int a,int b):i(a),b(b) 正确:A(inta,intb):BASE(a),b(b) (3)错误:BASE obj(1,2); 正确:A obj(1,2); 解析:(1)主要考查考生对于类的定义的掌握,类定义结束后大括号外面不能缺少分号;
(2)主要考查考生对于派生类构造函数的掌握,该函数应该实现将参数传递给基类的功能,即派生类的构造函数应使用参数列表的形式将基类的数据成员初始化,初始化的时候直接使用基类的名称(BASE)而不是基类中变量的名称(i);
(3)主要考查考生对于基类和派生类函数调用关系的掌握,要调用派生类的构造函数必须使用派生类的对象,构造函数只有在该类的对象被使用的时候才会被调用。

第6题:

使用VC6打开考生文件夹下的工程RevProj3。此工程包含一个源程序文件 RevMain3.cpp。阅读文件中的程序代码,找出程序中的错误,并改正。

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

//RevMain3.cpp

include<iostream>

using namespace std;

class MyClass{

public:

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

void MyClass(int a){ value=a;}

int Max(int x,int y)

{

if(x>y)

return x>y?x:y;

else

return y>value?y:value;

}

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

~MyClass(int a)

{

value=a;

}

private:

int value;

};

int main()

{

MyClass my(10);

cout<<my.Max(20,30)<<end1;

return 0;

}


正确答案:正确的类MyClass定义为: class MyClass { public: MyClas(int a) { value=a;} int Max(int xint y) { if (x>y) return x>y?x:y; else return y>a?y:a; } ~MyClass() {} private: value; };
正确的类MyClass定义为: class MyClass { public: MyClas(int a) { value=a;} int Max(int x,int y) { if (x>y) return x>y?x:y; else return y>a?y:a; } ~MyClass() {} private: value; }; 解析:本题考核类的定义。程序中出现了2个出错标识符,说明此程序有2处错误。第1处错误:类的构造函数没有返回类型,而程序中将类的构造函数设为void型,显然是错误的。
第2处错误:C++中类的析构函数中不能带有行参,所以程序中析构函数的定义是错误的。

第7题:

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

a=3 b=13

a=5 b=13

注意:请勿修改主函数main中的任何内容。

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

include<iostream.h>

class T

{

public:

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

T(int x){a=x; b+=x;)

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

void display(T c)

{ cout<<"a="<<c.a<<"\t"<<"b="<<c.b<<endl;)

private:

const int a;

static int b;

};

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

int b=5;

void main()

{

T A(3),B(5);

T::display(A);

T::display(B);

}


正确答案:(1)错误:T(int x){a=x;b+=x;) 正确:T(int x):a(x){b+=x;) (2)错误:void display(T c) 正确:static void display(T c) (3)错误:int b=5; 正确:int T::b=5;
(1)错误:T(int x){a=x;b+=x;) 正确:T(int x):a(x){b+=x;) (2)错误:void display(T c) 正确:static void display(T c) (3)错误:int b=5; 正确:int T::b=5; 解析:(1)主要考查考生对常量数据成员初始化方法的掌握,常量数据成员的初始化只能通过构造函数的成员初始化列表进行,常量数据成员使用关键字const修饰;
(2)主要考查考生对静态成员函数的理解,由主函数中的T::display(A)与T::display(B)可知display应定义为静态成员函数,因为调用类的静态成员必须使用作用域“::”符号;
(3)主要考查考生对静态数据成员初始化方法的掌握,由static int b可知b为静态成员数据,其初始化必须在类外使用作用域运算符(::)限定它所属的类。

第8题:

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

(1)完成类CVector构造函数的定义,把传入的int型参数a和b分别赋值给类的成员变量x和y。请在注释“//**1**”之后添加适当的语句。

(2)完成类CVector的“+”运算符重载函数的定义,使Cvector类的两个对象相加时可以直接使用符号“+”,并且结果仍然为类Cvector的对象,请在注释“//**2**”之后添加适当的语句。

(3)在主函数中添加适当的语句,把类Cvector的对象a和b相加,并且把结果保存在对象c中,最后以“x,y”的形式输出在屏幕上,请在注释“//**3**”之后添加适当的语句。

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

include <iostream.h>

class CVector

{

public:

int x,y;

CVector () {};

CVector (int,int);

CVector operator + (CVector);

};

CVector::CVector (int a, int b)

{

//**1**

}

CVector CVector::operator+ (CVector param)

{

//**2**

temp.y = y + param.y;

return (temp);

}

int main ()

{

CVector a (3,1);

CVector b (1,2);

CVector c;

//**3**

return 0;

}


正确答案:(1) x=a; y=b; (2) CVector temp; temp.x=x+param.x; (3) c=a+b; toutc.x""c.y;
(1) x=a; y=b; (2) CVector temp; temp.x=x+param.x; (3) c=a+b; toutc.x","c.y; 解析:主要考查考生对于类的数据成员赋值与定义重载为成员函数的运算符函数的掌握,其中(2)就是运算符函数的实现,实际上就是通过已有的函数和符号实现复杂的运算功能,并最终返回该类的对象,注意最后的返回值必须是对象才能满足要求,(4)中使用对象调用类的数据成员用符号“.”。

第9题:

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

(1)为类Circle增加一个构造函数,该函数有一个参数,并在构造时将该参数值赋给成员radius。将该函数实现为一个非内联函数,并且使用参数列表的方式将类成员赋值。请在注释“//**1**”之后添加适当的语句。

(2)为类Circle增加一个成员函数print(),使得可以输出有关圆的信息,比如下列程序

Circle c;

c.SetRadius(5);

c.Print();

将输出:The circle has radius of 5!

请在注释“//**2**”之后添加适当的语句。

(3)完成友元函数void CompareR(Circle *cl,Circle*c2)的定义,在屏幕中输出c1与c2比较radius大小结果,要求使用 if-else结构完成。请在注释“//**3**”之后添加适当的语句。

输出结果如下;

The circle has radus of 5!

The circle has radius of 10!

c1<c2

注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。

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

include<iostream.h>

class Circle{

public:

Circle():radius(5){}

//**1**

void SetRadius(int r) {radius=r; }

int GetRadius() {return radius; }

//**2**

friend void CompareR(Circle *c1,Circle*C2);

private:

int radius;

};

void CompareR(Circle *c1,Circle *C2)

{

//**3**

cout<<"c1>c2"<<endl;

else

if((c1->GetRadius())==(c2->GetRadius()))

cout<<"c1=c2"<<endl;

else

if((c1->GetRadius())<(c2->GetRadius()))

cout<<"c1<c2"<<endl;

}

void main()

{

Circle c1;

c1.SetRadius(5);

C1.Print();

Circle c2(10);

c2.Print();

CompareR(&c1,&c2);

}


正确答案:(1) Circle(int rad):radius(rad){} (2) void Print(){cout"The circle has radius of"radius"!\n";} (3) if((c1->GetRadius())>(c2->GetRadius()))
(1) Circle(int rad):radius(rad){} (2) void Print(){cout"The circle has radius of"radius"!\n";} (3) if((c1->GetRadius())>(c2->GetRadius())) 解析:本题考查成员函数的定义与实现,友元函数,if分支语句等知识点。友元函数的类体外的定义与一般函数一样,注意(3)中if-else的使用,else总是与其最近的那个if配对使用的,书写时最好使用缩进格式,将配对的if-else对齐,以免出错。