《面向对象程序设计C++》期末考试试卷

面向对象程序设计C++》期末考试试卷

选择题:

01、下列关于C++函数的叙述中,正确的是(  C  )。

  A)每个函数至少要具有一个参数   B)每个函数都必须返回一个值

  C)函数在被调用之前必须先声明   D)函数不能自己调用自己

02、下列关于类和对象的叙述中,错误的是(  A  )。

  A)一个类只能有一个对象         B)对象是类的具体实例

  C)类是对某一类对象的抽象       D)类和对象的关系是一种数据类型与变量的关系

03、在C++中,用于实现运行时多态性的是(  D  )。

  A)内联函数     B)重载函数     C)模板函数     D)虚函数

04、下列关于运算符重载的叙述中,正确的是(  B  )。

  A)通过运算符重载,可以定义新的运算符      B)有的运算符只能作为成员函数重载

  C)若重载运算符+,则相应的运算符函数名是+  D)重载二元运算符时,必须声明两个形参

05、对于语句 cout<<x<<endl;错误的是描述是(  D  )。

  A)“cout”是一个输出流对象    B)“endl”的作用是输出回车换行

  C)“x”是一个变量             D)“<<”称作提取运算符

06、有如下类声明,则类MyDERIVED中保护的数据成员和成员函数的个数是(  B  )。

  class MyBASE

  { 
private:   
     int k;

public:    
 void set(int n)
{ k=n;}

  int get( )const{ return k;}   };

  class MyDERIVED: protected MyBASE

  { protected: 
 int j;

    public:    
 void set(int m, int n)
{ MyBASE::set(m); j=n;}

   int get( ) const 
{ return MyBASE::get( )+j; }   };

 A)4    B)3    C)2    D)1

07、已知在一个类体中包含如下函数原型: Volume operator-(Volume)const;,下列关于这个函数的叙述中,错误的是(   B)。

  A)这是运算符-的重载运算符函数  B)这个函数所重载的运算符是一个一元运算符

  C)这是一个成员函数             D)这个函数不改变类的任何数据成员的值

08、执行如下的程序段后,输出结果是(    )。

  cout.fill('*'); cout.width(6); cout.fill('#');  cout << 123 << endl;

  A)###123  B)123###  C)***123  D)123***

09、在下列函数原型中,可以作为类AA构造函数的是(  D  )。

  A)void AA(int);   B)int AA();   C)AA(int)const;   D)AA(int);

10、下面四个选项中,( A   )是用来声明虚函数的。

  A)virtual  B)public  C)include  D)using namespace

11、实现运行时的多态性要使用(  D  )。

  A)重载函数    B)构造函数    C)析构函数    D)虚函数  

12、要实现动态联编,必须通过( A   )调用虚函数。

  A)对象指针    B)成员名限定    C)对象名    D)派生类名

13、以下(   C )成员函数表示纯虚函数。

  A)virtual int vf(int);      B)void vf(int)=0;

  C)virtual void vf()=0;      D)virtual void vf(int){}

14、有如下类声明:

class XA

 { private: int x;

public:  XA(int n){ x=n;}  };

 class XB: public XA

{ private: int y;

   public:  XB(int a,int b);  };

  在构造函数XB的下列定义中,正确的是(   B )。

  A)XB::XB(int a,int b): x(a),y(b){ }  B)XB::XB(int a,int b): XA(a),y(b){ }

  C)XB::XB(int a,int b): x(a),XB(b){ } D)XB::XB(int a,int b): XA(a),XB(b){ }

15、在表达式 x+y*z中, + 是作为成员函数重载的运算符,* 是作为非成员函数重载的运算符。则 operator+ 有    个参数,operator* 有    参数。(  C )

  A)2、2      B)2、1      C)1、2      D)1、1

16、应在下列程序划线处填入的正确语句是(  C  )。

  class Base  

 { public:

      void fun(){cout<<"Base::fun"<<endl;}   };

 class Derived:public Base  

  { void fun()

      {      //显示调用基类的函数fun()  

        cout<<"Derived::fun"<<endl; }        };  

  A)fun();   B)Base.fun();   C)Base::fun();   D) Base->fun();

二、填空题(每空2分,共20分。)

17、面向对象程序设计有四个主要特点,即抽象、封装、__继承__和__多态性__。

18、非成员函数应声明为类的_friend___函数才能访问这个类的private成员。

19、派生类中的成员不能直接访问基类中的__private__成员。

20、在用class定义一个类时,数据成员和成员函数的默认访问权限是_private___。

21、运算符重载函数可能是类的 友元__函数,也可以是类的_成员___函数,还可以是普通函数。

22、用流对象的成员函数控制输出格式时,用于设置字段宽度的流成员函数的名称是_width___,与之作用相同的控制符名称是__setw__。

23、含有纯虚函数的类称为__抽象类__。

三、程序的填空、程序的执行(每题4分,共20分。)

24、以下程序是定义一个计数器类counter,对其重载运算符“+”,请填空。

class counter

{ private: int n;

  public:

    counter() {n=0;}

    counter(int i){n=i;}

    ____ //运算符重载函数

    { counter t; t.n=n+c.n; return t; }

    void disp() {cout<<"n="<<n<<endl;}

};

void main()

{ counter c1(5),c2(10),c3;

  c3=c1+c2;

  c1.disp(); c2.disp(); c3.disp(); }

25、下列程序的输出结果为2,请将程序补充完整。

class Base

{ public:

    ____ void fun()

   { cout<<1; }

};

class Derived: public Base

{ public:

    void fun( ) { cout<<2; }

};

int main( )

{ Base *p= new Derived;

  p->fun( );

  delete p;

  return 0; }

26、写出执行下面程序的输出结果。

void fun(int &x, int y)

{ int t=x; x=y; y=t; }

int main( )

{ int a[2] = {23, 42};

  fun(a[1],a[0]);

  std::cout<<a[0]<<","<<a[1]<<std::endl;

  return 0; }

27、写出执行下面程序的输出结果。

class A { public: A() { cout<<"A"; } };

class B { public: B() { cout<<"B"; } };

class C : public A

 { B b;

   public: C() { cout<<"C"; }

  };

int main( ) {  C obj; return 0; }

28、写出执行下面程序的输出结果。

class Base

  { private:

      char c;  

    public:  

      Base(char n):c(n){}  

      virtual ~Base(){cout<<C;}  

  };  

  class Der:public Base

  { private:

      char c;  

    public:  

      Der(char n):Base(n+1),c(n){}  

      ~Der(){cout<<C;}  

  };  

  int main()  

  { Der("X");  return 0; } 

四、编程题(12分)

29、编写一个程序计算“三角形、正方形、圆形”三种图形的面积,要求:

a)抽象出一个基类base;b)在其中说明一个虚函数用来求面积;c)利用派生类定义“三角形、正方形、圆形”;d)编写主函数并测试。
————————————————

01-05 C A D B D

 06-10 B B A D A

 11-16 D A C B C C

17、继承、多态性  

 18、友元  

 19、私有

20、private或私有  

21、成员、友元

22、width/setw  

23、抽象类

24、counter operator + (counter c)

25、virtual

26、23,23

27、ABC

28、XY

29、

#include <iostream>

using namespace std;

class base

{ public:

     virtual float area() const

     { return 0; }

};

class triangle: public base

{ protected:

    float bian,height;

  public:

      triangle(float a=0, float h=0) { bian=a; height=h; }

      virtual float area() const

      { return bian*height/2; }

};

class square: public base

{ protected:

     float bian;

  public:

     square(float a=0) { bian=a; }

     virtual float area() const

     { return bian*bian; }

};

class circle: public base

{ protected:

    float radius;

  public:

    circle(float r=0) { radius=r; }

    virtual float area() const

    { return 3.14*radius*radius; }

};

int main()

{ triangle t(3,4);  square s(5);  circle c(2);

  base *p;

  p=&t; cout<<"triangle's area:"<<p->area()<<endl;

  p=&s; cout<<"square's   area:"<<p->area()<<endl;

  p=&c; cout<<"circle's   area:"<<p->area()<<endl;

  return 0;

}


————————————————
版权声明:本文为CSDN博主「叁佰_542586」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/csq542586/article/details/116329944

  • 2
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值