c++试题

一、 填空题(每空1分,共14分)

1、  观看以下程序:

class point{

public:

   void show() {cout<<”point”<<endl;}

};

void main()

{

point p1;

point *p;

p=&p1;

___p1.show()____//通过对象p1访问show函数

____p->show()__//通过指针p访问show函数

}

2、 在C++类中可以包含__公有__、私有__和___保护___三种具有不同访问控制权的成员。

3、 定义类时,在类头中将使用关键字___class______来表示类定义的开始。

4、 如果一个类中至少有一个纯虚函数,则该类称为_____抽象类_____。

5、 C++类的组成包括数据成员和___成员函数__,友元_不是__(是、不是)该类的成员函数。

6、 友员函数是用关键字__friend___修饰的非成员函数。

7、 若有:

int i;

int &j=i;

i=10;

j=i+1;

则i=_11__,j=_11__。

8、 new的功能是___动态申请内存空间___,delete的功能是___释放由new申请的空间____。

二、  选择题(每小题1.5分,共30分)

1、下列特性中不是面向对象程序设计语言所特有的是( D )。

(A)数据封装   (B)继承(C)多态性   (D)模板

2、( B )是给变量取一个别名,它引入了变量的同意词。

(A)指针   (B)引用   (C)枚举   (D)结构

3、类成员的访问权限中,( C )只能被本类的成员函数和其友元函数访问。

(A)share  (B)public (C)private    (D)protected

4、关于构造函数,下列说法不正确的是( D )。

(A)构造函数名字和类名相同

(B)构造函数在创建对象时自动执行

(C)构造函数无任何函数返回类型

(D)构造函数有且只有一个

5、派生类可以访问其基类的( D )。

(A)公有成员

(B)保护成员

(C)私有派生

(D)公有和保护成员

6、下列关于运算符重载的描述中,错误的是(  B  )。

(A)运算符重载不可以改变操作数的个数

(B)运算符重载不可以改变运算符的功能

(C)运算符重载不可以改变结合方向

(D)运算符重载不可以改变运算优先级

7、C++语言是从早期的C语言逐渐发展演变而来的.与C语言相比,它在求解问题方法上进行的最大改进是(     B )

(A)面向过程  (B)面向对象  (C)安全性  (D)复用性

8、对于类中定义的成员,其隐含访问权限为(  C  )。

    A.public                     B.protected

    C.private                    D.static

9、下面有关重载函数的说法中正确的是(  C  )

(A)重载函数必须具有不同的返回值类型;  (B)重载函数形参个数必须不同;  

(C)重载函数必须有不同的形参列表       (D)重载函数名可以不同;

10、有如下的对类“CSample”的说明,其中( A )是错误的。

  class CSample {    

  A.int a=23;

  B.CSample();

    public:

  C.CSample(int val);

  D.~ CSample();

11、在int a=3,int *p=&a;中,*p的值是( D )

A.变量a的地址值        B.无意义

C.变量p的地址值        D.3

12、每个类(  C)构造函数。

(A)只能有一个     (B)只可有公有的

(C)可以有多个     (D)只可有缺省的

13、在一个类中可以对一个操作符进行(  D )重载。

(A)1 种   (B)2 种以下   (C)3 种以下   (D)多种

14、在公有继承的情况下,基类非私有成员在派生类中的访问权限(B )

(A) 受限制   (B)保持不变    (C)受保护     (D)不受保护

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

#include <iostream.h>

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();

16、执行下面的程序将输出( A )

#include <iostream.h>

class BASE{

     char c;

     public:

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

        virtual ~BASE(){cout<<c;}

        };

class DERIVED:public BASE{

     char c;

   public:

        DERIVED(char n):BASE(n+1),c(n){}

        ~DERIVED(){cout<<c;}

};

int main()

{DERIVED a('X');

 return 0;

}

(A)XY     (B)YX    (C)X      (D)Y

17、     下面描述中,表达错误的是(   B    )

(A)公有继承时基类中的public成员在派生类中仍是public的

(B)公有继承是基类中的private成员在派生类中仍是private的  

(C)公有继承时基类中的protected成员在派生类中仍是protected的  

(D)私有继承时基类中的public成员在派生类中是private的

18、定义析构函数时,应该注意(    C  )

(A)其名与类名完全相同       (B)返回类型是 void 类型

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

19、对于在类中定义的静态数据成员,下面正确的说法是(  C )

A.该类的每个对象中都有一个静态数据成员

B.对象创建时产生     

C.在类外进行初始化

D.既可以在类外初始化,也可以在类内初始化

 

20、C++中声明常量的关键字是( A )。

A.  const      B.  extern        C.   public      D.  enum

 

三、  改错题(每处2分,共6分)

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

member=0

member=5

menber=10

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

#include <iostream.h>

class MyClass

{

public:

  MyClass(int i){member=i;}

  void SetMember(int m){member=m;}

  int GetMember()const{return menber;}

  void print()cont{cout<<"member="<<MEMBER<<ENDL;}

private:

  int member;

       };

void main()

{

  MyClass obj1;  

  obj1.print();

  MyClass obj2(3);

  obj1.member=5;   

  MyClass.SetMember(10);   

  obj1.print();

  obj2.print();

}

 

答案:MyClass obj1(0);    obj1.SetMember(5);      obj2.SetMember(10);

 

四、  写出下列程序的执行结果(每小题5分,共20分)

1、  

#include<iostream.h>

class Sample

{ int n;

public:

Sample(int i){n=i;}

friend int add(Sample &s1,Sample &s2);

};

int add(Sample &s1,Sample &s2)

{

return s1.n+s2.n;

}

void main()

{

Sample s1(10),s2(20);

cout<<add(s1,s2)<<endl;

}

执行结果是:30

 

2、  

#include<iostream.h>

int add(int x,int y)

{

return x+y+1;

}

double add(double x,double y)

{

return x+y-1;

}

void main()

{

int a=2,b=4;

double c=2.6,d=7.4;

cout<<add(a,b)<<","<<add(c,d)<<endl;

}

  执行结果是:7   9

 

 

3、

#include<iostream.h>

class A

{

    public:

    int n;

};

class B:virtual public A{};

class C:virtual public A{};

class D:public B,public C

{

    int getn(){return B::n;}

};

void main()

{

    D d;

    d.B::n=10;

    d.C::n=20;

    cout<<d.B::n<<","<<d.C::n<<endl;

}

执行结果是:20  20

 

 4、

#include <iostream.h>

class  myclass

{

int a,b;

static int s; 

public:

myclass(int x,int y)

{a=x;b=y;s++;}

void print()

{cout<<s<<endl;}

};

 int myclass::s=0;

 void main()

{

         myclass m1(1,2),m2(4,5),m3(6,7);

         m1.print();

         m2.print();

         m3.print();

}

 

执行结果是:3

            3

            3

 

五、 编程题(每题10分、共30分)

1、 测试一个名为rectangle的矩形类,其属性为矩形的左下角与右上角两个点的坐标,能计算矩形的面积。(10分)

1、

#include <iostream.h>

#include <math.h>

class rectangle  //(2分)

{

private:

       int x1,y1,x2,y2; // (2分)

public:

       rectangle(int xx1,int yy1,int xx2,int yy2) //(1分)

       {x1=xx1;y1=yy1;x2=xx2;y2=yy2;}

       int getarea()   //(2分)

       {return abs((x2-x1)*(y1-y2));}

};

void main()

{rectangle rect1(3,7,8,5); (2分)

       cout<<rect1.getarea()<<endl; (1分)

}

 

2、 定义一boat与car两个类,二者都有weight属性,定义二者的一个友元函数totalweight(),计算二者的重量和。(10分)

2、(10分)

#include <iostream.h>

class car;(1分)

class boat{ 

private:

       int weight;  //(1分)

public:

       boat(int w):weight(w){}  //(1分)

       friend int totalweight(boat b1,car c1);  //(2分)

};

class car{  /(1分)

private:

       int weight; (1分)

public:

       car(int w):weight(w){};

       friend int totalweight(boat b1,car c1); (1分)

};

int totalweight(boat b1,car c1)  //(1分)

{

       return b1.weight+c1.weight;

}

void main()

{   car c1(1000);

       boat b1(2000);

       cout<<totalweight(b1,c1)<<endl;(1分)

}

3、 设计一个汽车类vehicle,包含的数据成员有车轮个数wheels和车重weight。小车类car是它的派生类,其中包含载人数passenger_load。每个类都有相关数据的输出方法。在主程序中定义一个car类对象,对其车轮个数、车重、载人数进行设置并显示。(10分)

3、(10分)

#include<iostream.h>

class vehicle // 定义汽车类 (3分)

{

protected:

int wheels; // 车轮数

float weight; // 重量

public:

vehicle(int wheels,float weight);

int get_wheels();

float get_weight();

float wheel_load();

void show();

};

class car:public vehicle // 定义小车类 (3分)

{

int passenger_load; // 载人数

public:

car(int wheels,float weight,int passengers=4);

int get_passengers();

void show();

};

vehicle::vehicle(int wheels1,float weight1)  //(1分)

{ wheels=wheels1;

weight=weight1; }

int vehicle::get_wheels()

{ return wheels; }

float vehicle::get_weight()

{ return weight; }

void vehicle::show()  (1分)

{ cout << "车轮:" << wheels << "个" << endl;

cout << "重量:" << weight << "公斤" << endl; }

car::car(int wheels, float weight,

int passengers) :vehicle(wheels, weight)

{ passenger_load=passengers; }

int car::get_passengers ()

{ return passenger_load; }

void car::show()

{ cout <<" 车型:小车" << endl;

vehicle::show();

cout << "载人:" << passenger_load << "人" << endl;

cout << endl; }

void main ()

{ car car1(4,2000,5);  (1分)

cout << "输出结果" << endl;

car1. show (); (1分)

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

一、 填空题(每空1分,共14分)

1、  观看以下程序:

class point{

public:

   void show() {cout<<”point”<<endl;}

};

void main()

{

point p1;

point *p;

p=&p1;

___p1.show()____//通过对象p1访问show函数

____p->show()__//通过指针p访问show函数

}

2、 在C++类中可以包含__公有__、私有__和___保护___三种具有不同访问控制权的成员。

3、 定义类时,在类头中将使用关键字___class______来表示类定义的开始。

4、 如果一个类中至少有一个纯虚函数,则该类称为_____抽象类_____。

5、 C++类的组成包括数据成员和___成员函数__,友元_不是__(是、不是)该类的成员函数。

6、 友员函数是用关键字__friend___修饰的非成员函数。

7、 若有:

int i;

int &j=i;

i=10;

j=i+1;

则i=_11__,j=_11__。

8、 new的功能是___动态申请内存空间___,delete的功能是___释放由new申请的空间____。

二、  选择题(每小题1.5分,共30分)

1、下列特性中不是面向对象程序设计语言所特有的是( D )。

(A)数据封装   (B)继承(C)多态性   (D)模板

2、( B )是给变量取一个别名,它引入了变量的同意词。

(A)指针   (B)引用   (C)枚举   (D)结构

3、类成员的访问权限中,( C )只能被本类的成员函数和其友元函数访问。

(A)share  (B)public (C)private    (D)protected

4、关于构造函数,下列说法不正确的是( D )。

(A)构造函数名字和类名相同

(B)构造函数在创建对象时自动执行

(C)构造函数无任何函数返回类型

(D)构造函数有且只有一个

5、派生类可以访问其基类的( D )。

(A)公有成员

(B)保护成员

(C)私有派生

(D)公有和保护成员

6、下列关于运算符重载的描述中,错误的是(  B  )。

(A)运算符重载不可以改变操作数的个数

(B)运算符重载不可以改变运算符的功能

(C)运算符重载不可以改变结合方向

(D)运算符重载不可以改变运算优先级

7、C++语言是从早期的C语言逐渐发展演变而来的.与C语言相比,它在求解问题方法上进行的最大改进是(     B )

(A)面向过程  (B)面向对象  (C)安全性  (D)复用性

8、对于类中定义的成员,其隐含访问权限为(  C  )。

    A.public                     B.protected

    C.private                    D.static

9、下面有关重载函数的说法中正确的是(  C  )

(A)重载函数必须具有不同的返回值类型;  (B)重载函数形参个数必须不同;  

(C)重载函数必须有不同的形参列表       (D)重载函数名可以不同;

10、有如下的对类“CSample”的说明,其中( A )是错误的。

  class CSample {    

  A.int a=23;

  B.CSample();

    public:

  C.CSample(int val);

  D.~ CSample();

11、在int a=3,int *p=&a;中,*p的值是( D )

A.变量a的地址值        B.无意义

C.变量p的地址值        D.3

12、每个类(  C)构造函数。

(A)只能有一个     (B)只可有公有的

(C)可以有多个     (D)只可有缺省的

13、在一个类中可以对一个操作符进行(  D )重载。

(A)1 种   (B)2 种以下   (C)3 种以下   (D)多种

14、在公有继承的情况下,基类非私有成员在派生类中的访问权限(B )

(A) 受限制   (B)保持不变    (C)受保护     (D)不受保护

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

#include <iostream.h>

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();

16、执行下面的程序将输出( A )

#include <iostream.h>

class BASE{

     char c;

     public:

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

        virtual ~BASE(){cout<<c;}

        };

class DERIVED:public BASE{

     char c;

   public:

        DERIVED(char n):BASE(n+1),c(n){}

        ~DERIVED(){cout<<c;}

};

int main()

{DERIVED a('X');

 return 0;

}

(A)XY     (B)YX    (C)X      (D)Y

17、     下面描述中,表达错误的是(   B    )

(A)公有继承时基类中的public成员在派生类中仍是public的

(B)公有继承是基类中的private成员在派生类中仍是private的  

(C)公有继承时基类中的protected成员在派生类中仍是protected的  

(D)私有继承时基类中的public成员在派生类中是private的

18、定义析构函数时,应该注意(    C  )

(A)其名与类名完全相同       (B)返回类型是 void 类型

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

19、对于在类中定义的静态数据成员,下面正确的说法是(  C )

A.该类的每个对象中都有一个静态数据成员

B.对象创建时产生     

C.在类外进行初始化

D.既可以在类外初始化,也可以在类内初始化

 

20、C++中声明常量的关键字是( A )。

A.  const      B.  extern        C.   public      D.  enum

 

三、  改错题(每处2分,共6分)

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

member=0

member=5

menber=10

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

#include <iostream.h>

class MyClass

{

public:

  MyClass(int i){member=i;}

  void SetMember(int m){member=m;}

  int GetMember()const{return menber;}

  void print()cont{cout<<"member="<<MEMBER<<ENDL;}

private:

  int member;

       };

void main()

{

  MyClass obj1;  

  obj1.print();

  MyClass obj2(3);

  obj1.member=5;   

  MyClass.SetMember(10);   

  obj1.print();

  obj2.print();

}

 

答案:MyClass obj1(0);    obj1.SetMember(5);      obj2.SetMember(10);

 

四、  写出下列程序的执行结果(每小题5分,共20分)

1、  

#include<iostream.h>

class Sample

{ int n;

public:

Sample(int i){n=i;}

friend int add(Sample &s1,Sample &s2);

};

int add(Sample &s1,Sample &s2)

{

return s1.n+s2.n;

}

void main()

{

Sample s1(10),s2(20);

cout<<add(s1,s2)<<endl;

}

执行结果是:30

 

2、  

#include<iostream.h>

int add(int x,int y)

{

return x+y+1;

}

double add(double x,double y)

{

return x+y-1;

}

void main()

{

int a=2,b=4;

double c=2.6,d=7.4;

cout<<add(a,b)<<","<<add(c,d)<<endl;

}

  执行结果是:7   9

 

 

3、

#include<iostream.h>

class A

{

    public:

    int n;

};

class B:virtual public A{};

class C:virtual public A{};

class D:public B,public C

{

    int getn(){return B::n;}

};

void main()

{

    D d;

    d.B::n=10;

    d.C::n=20;

    cout<<d.B::n<<","<<d.C::n<<endl;

}

执行结果是:20  20

 

 4、

#include <iostream.h>

class  myclass

{

int a,b;

static int s; 

public:

myclass(int x,int y)

{a=x;b=y;s++;}

void print()

{cout<<s<<endl;}

};

 int myclass::s=0;

 void main()

{

         myclass m1(1,2),m2(4,5),m3(6,7);

         m1.print();

         m2.print();

         m3.print();

}

 

执行结果是:3

            3

            3

 

五、 编程题(每题10分、共30分)

1、 测试一个名为rectangle的矩形类,其属性为矩形的左下角与右上角两个点的坐标,能计算矩形的面积。(10分)

1、

#include <iostream.h>

#include <math.h>

class rectangle  //(2分)

{

private:

       int x1,y1,x2,y2; // (2分)

public:

       rectangle(int xx1,int yy1,int xx2,int yy2) //(1分)

       {x1=xx1;y1=yy1;x2=xx2;y2=yy2;}

       int getarea()   //(2分)

       {return abs((x2-x1)*(y1-y2));}

};

void main()

{rectangle rect1(3,7,8,5); (2分)

       cout<<rect1.getarea()<<endl; (1分)

}

 

2、 定义一boat与car两个类,二者都有weight属性,定义二者的一个友元函数totalweight(),计算二者的重量和。(10分)

2、(10分)

#include <iostream.h>

class car;(1分)

class boat{ 

private:

       int weight;  //(1分)

public:

       boat(int w):weight(w){}  //(1分)

       friend int totalweight(boat b1,car c1);  //(2分)

};

class car{  /(1分)

private:

       int weight; (1分)

public:

       car(int w):weight(w){};

       friend int totalweight(boat b1,car c1); (1分)

};

int totalweight(boat b1,car c1)  //(1分)

{

       return b1.weight+c1.weight;

}

void main()

{   car c1(1000);

       boat b1(2000);

       cout<<totalweight(b1,c1)<<endl;(1分)

}

3、 设计一个汽车类vehicle,包含的数据成员有车轮个数wheels和车重weight。小车类car是它的派生类,其中包含载人数passenger_load。每个类都有相关数据的输出方法。在主程序中定义一个car类对象,对其车轮个数、车重、载人数进行设置并显示。(10分)

3、(10分)

#include<iostream.h>

class vehicle // 定义汽车类 (3分)

{

protected:

int wheels; // 车轮数

float weight; // 重量

public:

vehicle(int wheels,float weight);

int get_wheels();

float get_weight();

float wheel_load();

void show();

};

class car:public vehicle // 定义小车类 (3分)

{

int passenger_load; // 载人数

public:

car(int wheels,float weight,int passengers=4);

int get_passengers();

void show();

};

vehicle::vehicle(int wheels1,float weight1)  //(1分)

{ wheels=wheels1;

weight=weight1; }

int vehicle::get_wheels()

{ return wheels; }

float vehicle::get_weight()

{ return weight; }

void vehicle::show()  (1分)

{ cout << "车轮:" << wheels << "个" << endl;

cout << "重量:" << weight << "公斤" << endl; }

car::car(int wheels, float weight,

int passengers) :vehicle(wheels, weight)

{ passenger_load=passengers; }

int car::get_passengers ()

{ return passenger_load; }

void car::show()

{ cout <<" 车型:小车" << endl;

vehicle::show();

cout << "载人:" << passenger_load << "人" << endl;

cout << endl; }

void main ()

{ car car1(4,2000,5);  (1分)

cout << "输出结果" << endl;

car1. show (); (1分)

}

 

 

 

 

 

 

posted @ 2018-03-30 20:00  慕容天白  阅读(1933)  评论(0编辑  收藏  举报