• 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分)

    }

     

     

     

  • 相关阅读:
    创建一个 mac 的后台进程(daemon)
    Centos 7创建一个服务
    MAC配置VIM环境
    Spark源码剖析(九):TaskScheduler原理与源码剖析
    Spark源码剖析(八):stage划分原理与源码剖析
    教你如何写递归(数学归纳法,干货强推!)
    Spark源码剖析(七):Job触发流程原理与源码剖析
    剑指offer:变态跳台阶
    Spark源码剖析(六):Worker原理与源码剖析
    Spark源码剖析(五):Master原理与源码剖析(下)
  • 原文地址:https://www.cnblogs.com/XiDaPuBen/p/8678276.html
Copyright © 2020-2023  润新知