考试方式
制卷份数
 
分人
核分人
一.单项选择题(本大题共15小题,每小题3分,共 45分)
1. 关于C++C语言关系的描述中,( )是错误的。                           
A.  C语言是C++语言的一个子集             B.  C语言与C++语言是兼容的
C.  C++语言对C语言进行了一些改进         D.  C++语言和C语言都是面向对象的
2.在下列关键字中,用于说明类中公有成员的是__.                           
  A. public    B. private    C. protected    D. friend
3.如果编程者没有显式定义构造函数(包括复制构造函数),C++编译器就___   
  A.出现编译错误      B.没有构造函数
  C.必须显示定义      D.隐式定义缺省的构造函数
4.关于成员函数特征的下述描述中,___是错误的。                             
  A.成员函数一定是内联函数          B.成员函数可以重载
  C.成员函数可以设置参数的缺省值    D.成员函数可以是静态的
5. 当将一个类A或函数f()说明为另一个类B的友元后,类A或函数f()能够直接访问类B的()。
A. 只能是公有成员                   B. 只能是保护成员
C. 只能是除私有成员之外的任何成员    D. 具有任何权限的成员
6. 派生类的成员函数可以直接访问基类的(  )成员。                          ( B  )
A. 所有      B. 公有和保护      C. 保护和私有        D. 私有
7. 关于运算符重载,下列说法正确的是(  )。                                ( C  )
A. 重载时,运算符的优先级可以改变。        B. 重载时,运算符的结合性可以改变。
C. 重载时,运算符的功能可以改变。        D. 重载时,运算符的操作数个数可以改变。
8. 对类对象成员的初始化是通过构造函数中给出的(  )实现的。                  ( B  )
A. 函数体      B. 初始化表      C. 参数表      D. 初始化表或函数体
9. 在成员函数中进行双目运算符重载时,其参数表中应带有(  )个参数。        ( B  )
A. 0      B. 1      C. 2      D. 3
10. 如果表达式a+b中的“+”是作为成员函数重载的运算符,若采用运算符函数调用格式,则可表示为(  )。                                                     
A. a.operator+(b)  B. b.operator+(a)  C.operator+(a,b)   D. operator(a+b)
11. 当派生类中有和基类一样名字的成员时,一般来说,( )。                ( B  )
A. 将产生二义性              B. 派生类的同名成员将覆盖基类的成员
C. 是不能允许的              D. 基类的同名成员将覆盖派生类的成员
12. 下列对派生类的描述中错误的说法是:(  )。                         
A. 派生类至少有一个基类                       
B. 派生类可作为另一个派生类的基类
C. 派生类除了包含它直接定义的成员外,还包含其基类的成员
D. 派生类所继承的基类成员的访问权限保持不变
13. 类的析构函数是一个对象被(    )时自动调用的。                      ( B  )
A. 建立      B. 撤消      C. 赋值        D. 引用
14.静态成员函数仅能访问___                                        
  A.静态的数据成员  B.非静态的成员函数    C.非静态的数据成员    D.以上都不对
15. 在一个函数中,要求通过函数来实现一种不太复杂的功能,并且要求加快执行速度,选用( )。                                                         
A.内联函数          B.重载函数        C.递归调用        D.嵌套调用
二.填空题(本大题共 5小题,每小题 3分,共 15分)
1.面向对象的程序设计有四大特征,它们是抽象、封装、继承   多态 
2. 在面向对象的程序设计中,通过_ 封装 _实现数据隐藏;通过_ 继承 _实现代码的复用。
3.在C++类中,有一种不能定义对象的类,这样的类只能被继承,称之为 抽象类 ,定义该类至少具有一个   纯虚函数 
4.类是用户定义的类型,具有类类型的变量称作   对象 
5.在公有继承的情况下,基类数据成员在派生类中的访问权限   保持不变 
三.程序填空题.(本大题共 2小题,共 21分)
******
******
******
******析构函数的定义
******
******
******
******
班级:
******
******
******
******
******
学号:
******
******
******
******
******
******
姓名:
******
******
******
******
******
******
3  1
1. 9分)class Point                           
{ private:
    int x, y;
  public:
    Point(){x=y=0;}      Point(int x0,int y0) {x=x0;y=y0;}
    int GetX() { return x; }
    int GetY() { return y; }
    void Print(){cout<<"Point("<<x<<","<<y<<")"<<endl;}
    ___(1)___;  //友元函数声明
    ___(2)___;  //友元函数声明};
Point operator+(Point& pt,int dd) //加号操作符重载函数,实现Point类对象与整数加法
{ Point temp=pt;  temp.x+=dd;  temp.y+=dd;    return temp;}
Point operator+(Point& pt1,Point& pt2) //加号操作符重载函数,实现两个Point类对象的加法
{ Point temp=pt1;
  temp.x+=pt2.x;
  ___(3)___;
  return temp;}
答案:(1) friend Point operator+(Point& pt,int dd)          ----3
(2) friend Point operator+(Point& pt1,Point& pt2)    ----3
(3) temp.y+=pt2.y                                    ----3
2.(12分) 已知一个类的定义如下:
#include<iostream.h>
class AA { private:
            int a[10];    int n;
public:
      void SetA(int aa[], int nn); //用数组aa初始化数据成员a,用nn初始化数据成员n
            int MaxA();  //从数组a中前n个元素中查最大值
void SortA();  //采用选择排序的方法对数组a中前n个元素进行从小到大排序
            void InsertA();//采用插入排序的方法对数组a中前n个元素进行从小到大排序
            void PrintA();  //依次输出数组a中的前n个元素};
该类中InsertA()函数的实现如下,请在标号位置补充适当的内容。
void ___(1)___
{    int i,j;
    for(i=1; i<n; i++) {
        int x=a[i];
        for(j=i-1; j>=0; j--)
            if(x<a[j]) ___(2)___;
            else ___(3)___;
        a[j+1]=x; }}
使用该类的主函数如下:
void main()
{    int a[10]={23,78,46,55,62,76,90,25,38,42};
    AA x; 
    x.SetA(a,6) ;
    int m=___(4)___;
    x.PrintA();
    cout<<m<<endl;}
该程序运行结果为:
23 78 46 55 62 76  78
答案:(1) AA::InsertA()    ----3          (2) a[j+1]=a[j]  ----3
      (3) break2.          ----3          (4) x.MaxA()    ----3 
四.程序设计题.(本大题共 1小题,共19分)
分别声明Teacher(教师)类和Cadre(干部)类,采用多重继承方式由这两个类派生出新类Teacher_Cadre(教师兼干部)。要求:
(1) 在两个基类中都包含name(姓名)、age(年龄)、sex(性别)、addr(地址)、tel(电话)等数据成员。
(2) Teacher类中还包含数据成员title(职称),在Cadre类中还包含数据成员post(职务)。在Teacher_Cadre类中还包含数据成员wages(工资)。
(3) 对两个基类中的姓名、年龄、性别、地址、电话等数据成员用相同的名字,在引用这些数据成员时,指定作用域。
(4) 在类体中声明成员函数,在类外定义成员函数。
(5) 在派生类Teacher_Cadre的成员函数show中调用Teacher类中的display函数,输出姓名、年龄、性别、职称、地址、电话,然后再用cout语句输出职务和工资。
******
******
******
******
******
******
******
******
班级:
******
******
******
******
******
学号:
******
******
******
******
******
******
姓名:
******
******
******
******
******
******
3  2
#include<string>
#include <iostream>
using namespace std;
class Teacher
{public:
  Teacher(string nam,int a,char s,string tit,string ad,string t);
  void display();
  protected:
    string name;
    int age;
    char sex;
    string title;
    string addr;
    string tel;
};                                      ----3
Teacher::Teacher(string nam,int a,char s,string tit,string ad,string t):
    name(nam),age(a),sex(s),title(tit),addr(ad),tel(t){ }
void Teacher::display()
    {cout<<"name:"<<name<<endl;
      cout<<"age"<<age<<endl;
      cout<<"sex:"<<sex<<endl;
      cout<<"title:"<<title<<endl;
      cout<<"address:"<<addr<<endl;
      cout<<"tel:"<<tel<<endl;
      }                                ----3 
class Cadre
{public:
  Cadre(string nam,int a,char s,string p,string ad,string t);
  void display();
  protected:
  string name;
  int age;
  char sex;
  string post;
  string addr;
  string tel;
};                                      ----3
Cadre::Cadre(string nam,int a,char s,string p,string ad,string t):
    name(nam),age(a),sex(s),post(p),addr(ad),tel(t){}
   
void Cadre::display()
    {cout<<"name:"<<name<<endl;
    cout<<"age:"<<age<<endl;
    cout<<"sex:"<<sex<<endl;
    cout<<"post:"<<post<<endl;
    cout<<"address:"<<addr<<endl;
    cout<<"tel:"<<tel<<endl;
    }                                  ----3
class Teacher_Cadre:public Teacher,public Cadre
{public:
  Teacher_Cadre(string nam,int a,char s,string tit,string p,string ad,string t,float w);
  void show( );
  private:
    float wage;
};                                    ----2
Teacher_Cadre::Teacher_Cadre(string nam,int a,char s,string t,string p,string ad,string tel,float w):
  Teacher(nam,a,s,t,ad,tel),Cadre(nam,a,s,p,ad,tel),wage(w) {}
void Teacher_Cadre::show( )
    {Teacher::display();
    cout<<"post:"<<Cadre::post<<endl;
    cout<<"wages:"<<wage<<endl;
    }                                ----3
int main( )
{Teacher_Cadre te_ca("Wang-li",50,'f',"prof.","president","135 Beijing Road,Shanghai","(021)61234567",1534.5);
  te_ca.show( );
  return 0;
}                                    ----2
3  3

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。