资源描述
         
            
  一、选择题(每小题3分,共48分。)
01、下列关于C++函数的叙述中,对的的是(    )。
  A)每个函数至少要具有一个参数   B)每个函数都必须返回一个值
  C)函数在被调用之前必须先声明   D)函数不能自己调用自己
02、下列关于类和对象的叙述中,错误的是(    )。
  A)一个类只能有一个对象         B)对象是类的具体实例 
  C)类是对某一类对象的抽象       D)类和对象的关系是一种数据类型与变量的关系
03、在C++中,用于实现运营时多态性的是(    )。
  A)内联函数     B)重载函数     C)模板函数     D)虚函数
04、下列关于运算符重载的叙述中,对的的是(    )。
  A)通过运算符重载,可以定义新的运算符      B)有的运算符只能作为成员函数重载
  C)若重载运算符+,则相应的运算符函数名是+  D)重载二元运算符时,必须声明两个形参
05、对于语句 cout<<x<<endl;错误的是描述是(    )。
  A)“cout”是一个输出流对象    B)“endl”的作用是输出回车换行
  C)“x”是一个变量             D)“<<”称作提取运算符
06、有如下类声明,则类MyDERIVED中保护的数据成员和成员函数的个数是(    )。
  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;,下列关于这个函数的叙述中,错误的是(    )。
  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构造函数的是(    )。
  A)void AA(int);   B)int AA();   C)AA(int)const;   D)AA(int);
10、下面四个选项中,(    )是用来声明虚函数的。
  A)virtual  B)public  C)include  D)using namespace
11、实现运营时的多态性要使用(    )。
  A)重载函数    B)构造函数    C)析构函数    D)虚函数
12、要实现动态联编,必须通过(    )调用虚函数。
  A)对象指针    B)成员名限定    C)对象名    D)派生类名
13、以下(    )成员函数表达纯虚函数。
  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的下列定义中,对的的是(    )。
  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* 有    参数。(    )
  A)2、2      B)2、1      C)1、2      D)1、1
16、应在下列程序划线处填入的对的语句是(    )。
  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、非成员函数应声明为类的____函数才干访问这个类的private成员。
19、派生类中的成员不能直接访问基类中的____成员。
20、在用class定义一个类时,数据成员和成员函数的默认访问权限是____。
21、运算符重载函数也许是类的____函数,也可以是类的____函数,还可以是普通函数。
22、用流对象的成员函数控制输出格式时,用于设立字段宽度的流成员函数的名称是____,与之作用相同的控制符名称是____。
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)编写主函数并测试。
参考答案
一、选择题(每小题3分,共48分。)
01-05 C A D B D
06-10 B B A D A
11-16 D A C B C C
二、填空题(每空2分,共20分。)
17、继承、多态性	18、友元	19、私有
20、private或私有	21、成员、友元
22、width/setw	23、抽象类
三、程序的填空、程序的执行(每题4分,共20分。)
24、counter operator + (counter c)
25、virtual
26、23,23
27、ABC
28、XY
四、编程题(12分)
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; 
}
           展开阅读全文