加载中…
个人资料
duruiqing
duruiqing
  • 博客等级:
  • 博客积分:0
  • 博客访问:1,737
  • 关注人气:50
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

C++作业(2)及参考答案

(2007-05-03 09:09:43)
标签:

教育

编程语言

计算机

面向对象

程序设计

分类: C 程序设计

C++作业(2

一、选择题

1.关于类定义格式的描述中,(  )是错的。

 A. 一般类的定义格式分为说明部分和实现部分 B. 一般类中包含有数据成员和成员函数 C. 类中成员有三种访问数据:公有、私有和保护

 D. 成员函数都应是公有的、数据成员都应是私有的

2.下列关键字中,(  )不是类中定义数据成员使用的关键字。

 A. static    B. float    C. extern    D. double 3.( )不是构造函数的特征。

A、构造函数的函数名与类名相同;B、构造函数可以重载;

C、构造函数可以设置缺省参数;  D、构造函数必须指定类型说明。

4、在C++中,关于下列设置参数默认值的描述中,( )是正确的。

A、不允许设置参数的默认值; B、设置参数默认值只能在定义函数时设置;

C、设置参数默认值时,应该是先设置右边的,再设置左边的;

D、设置参数默认值时,应该全部参数都设置。

5、关于new运算符的下列描述中,( )是错误的。

A、它可以用来动态创建对象和对象数组;

B、使用它创建的对象或对象数组可以使用运算符delete删除;

C、使用它创建对象时要调用构造函数;D、使用它创建对象数组时必须指定初始值。

6、重载函数在调用时选择的依据中,( )是错误的。

A、参数个数;B、参数的类型;C、函数名字;D、函数的类型。

7、( )是析构函数的特征。

A、一个类中只能定义一个析构函数;B、析构函数名与类名不同;

C、析构函数的定义只能在类体内;D、析构函数可以有一个或多个参数;

8、关于delete运算符的下列描述中,( )是错误的。

A、它必须用于new返回的指针;B、它也适用于空指针;

C、对一个指针可以连续使用多次该运算符;

D、指针名前只有一对方括号符,不管所删除数组的维数。

9、在( )情况下适宜采用inline定义内联函数。

A、函数体含有循环语句;B、函数体含有递归语句;

C、函数代码小,频繁调用;D、函数代码多,不常调用;

10、定义析构函数时,应该注意( )。

A、其函数名与类名完全相同;B、函数返回类型是void类型;

C、无形参,也不可重载;    D、函数体中必须有delete语句;

11、关于成员函数特征的下列描述中,( )是错误的。

A、成员函数一定是内联函数;    B、成员函数可以重载;

C、成员函数可以设置缺省参数值;D、成员函数可以是静态的;

12、下列静态数据成员的特性中,( )是错误的。

A、说明静态数据成员时前边要加修饰符static;B、静态数据成员要在类体外进行初始化;

C、静态数据成员不是所有对象所共用的;

D、引用静态数据成员时,要在其名称前加<类名>和作用域运算符;

13. 关于类成员函数的描述中,(  )是错的。

A. 类中可以说明一个或多个成员函数   B. 类中的成员函数只能定义在类体外

C. 定义在类体外的成员函数前加inline可以成为内联函数(内置函数) D. 在类体外定义成员函数时,在函数名前除了加类型说明符外,还需作用域符来限定该成员函数所属的类

 参考答案: DCDCD DACCC ACB

第8题 注:

使用运算符delete时,应注意如下事项:

①该运算符必须用于由运算符new返回的指针;

②对一个指针只能使用一次运算符delete;

③指针名前只能用一对方括号符,而不管所释放数组的维数,并且在方括号内不写任何东西;

④该运算符也适用于空指针。

二、分析以下程序的执行结果


 

1.#include<iostream.h>

class Sample

{

    public:

        Sample();

        Sample(int);

        ~Sample();

        void display();

    protected:

        int x;

};

Sample::Sample()

{

    x=0;

    cout<<"constructing normally\n";

}

Sample::Sample(int m)

{

   x=m;

   cout<<"constructing with a number:" <<x<<endl;

}

void Sample::display()

{

 cout<<"display a number:"<<x<<endl;

}

Sample::~Sample()

{

    cout<<"destructing\n";

}

void main()

{

    Sample obj1; //调用无参构造函数

    Sample obj2(20); //调用有一个参数的构造函数

    obj1.display(); //调用成员函数

    obj2.display();

//程序结束前调用析构函数

参考答案:

constructing normally

constructing with a number:20

display a number:0

display a number:20

destructing

destructing

考查内容:构造函数和析构函数

2.#include <iostream.h>

   class MyClass {

      public:

         int number;

        void set(int i);

   };

   int number=3;

   void MyClass::set (int i)

   {

         number=i;

   }

   void main()

   {

         MyClass my1; //调用默认构造函数

         int number=10; //定义普通局部变量

         my1.set(5); //调用成员函数,给成员变量赋值

         cout<<my1.number<<endl;

         my1.set(number);

         cout<<my1.number<<endl;

         my1.set(::number); // ::numer表示全局变量

         cout<<my1.number;

   }

参考答案:

5

10

3

考查内容:普通局部变量、成员变量、全局变量的区别

三、完成程序

1.下面列出了由三个文件main.cpp、MyClass.h和MyClass.cpp组成的一个程序。文件main.cpp中实现了主函数;文件MyClass.h中定义了类MyClass;文件MyClass.cpp中实现了类MyClass的成员函数。仔细阅读所给的程序,根据题意补充文件MyClass.h和文件MyClass.cpp的内容。要求:

a.将成员变量定义为私有的;

b.不要增加题中没有用到的类成员。


 

//文件main.cpp

#include <iostream.h>

#include "MyClass.h"

void main()

{

MyClass obj(3.3);

cout << obj.GetMember() << endl;

obj.SetMember(5.6);

cout << obj.GetMember() << endl;

}

 

/*******************************/

//文件 MyClass.cpp

#include "MyClass.h"

float MyClass::GetMember()

{

return member;

}

void MyClass::SetMember(float member)

{

MyClass::member=member;

}

//在这里写出构造函数的实现函数

MyClass::MyClass(float member)

{

       this->member = member;

}

/*******************************/

//文件 MyClass.h

//类MyClass的定义

class MyClass {

//在下面写出类的定义体

public:

       MyClass(float member);

       float GetMember();

       void SetMember(float member);

private:

       float member;

};

*2.下面是一个类Circle的定义,它有一个整型成员变量radius,有一个无参构造函数,还包括存取radius的两个函数GetRadius()和SetRadius(),程序中已经为Circle定义了大多数成员函数。仔细阅读类的定义,然后完成后面的小题。

class Circle {

public:

Circle():radius(5){}

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

int GetRadius() { return radius; }

private:

int radius; //圆的半径

};

(1) 为下面的类增加一个构造函数,该函数有一个参数,并在构造时将该参数值赋给成员radius。将该函数实现为一个非内联函数。

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

Circle c;

c.SetRadius(5);

c.Print();

将输出:

The circle has radius of 5!

参考答案:

#include <iostream.h>

class Circle {

public:

       Circle():radius(5){}

       Circle(int r);

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

       int GetRadius() { return radius; }

       void Print();

private:

       int radius; //圆的半径

};

Circle::Circle(int r)

     radius = r; }

 

void Circle::Print()

{     cout<<"The circle has radius of " << radius <<" !"<<endl; }

void main()

{

       Circle c;

       c.SetRadius(5);

       c.Print();

}

四、找出下面程序中的错误,并改正。

#include <iostream.h>

class TV

{//没有public标识符

       void SetStation(int Station);//函数没有实现

       int GetStation();//函数没有实现

private:

       int itsStation(0);//不允许初始化

}

void main()

{

       TV myTV;

       myTV.itsStation=9; //不能直接访问私有变量

       TV.SetStation(10);

       TV myOtherTV(2); //没有带参数的构造函数

       cout<<myTV.GetStation();

}

参考答案:

#include <iostream.h>

class TV

{

public: //没有public

       TV(int s=0){ itsStation = s;}

       void SetStation(int Station=0){itsStation = Station;}

       int GetStation(){return itsStation;}

private:

       int itsStation;

};

void main()

{

       TV myTV;

       myTV.SetStation(9);

       myTV.SetStation(10);

       TV myOtherTV(2);

       cout<<myTV.GetStation();

}

五、程序设计

1.定义一个满足如下要求的Date类。

(1)用下面的格式输出日期:   日/月/年

(2)可运行在日期上加一天操作(3)设置日期

*2.创建一个employee类,该类中有字符数组,表示姓名、街道地址、市、省和邮政编码。把表示构造函数、changname()、display()的函数的原型放在类定义中,构造函数初始化每个成员,display()函数把完整的对象数据打印出来。其中的数据成员是保护的,函数是公共的。

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有