魔术师 发表于 2021-7-19 21:27:11

C艹参考试题

一 单项选择题:1、C++源程序文件的默认扩展名为(A) A. cpp      B. exe       C. obj       D. lik2. 在如下结构体定义中,不正确的是( B)。 a.structstudent    {int no;     char name;    float score;   }; b.structstud   {    int no;    char name;    float score;   }; c.structstudent   {     int no;     char name;    float score;   } stud; d.struct   {    int no;    char name;    float score;   }stud ; 3. 类的构造函数被自动调用执行的情况是在定义该类的(c)A. 成员函数时B. 数据成员时C. 对象时D. 友元函数时4. 已知类A是类B的友元,类B是类C的友元,则(D)A. 类A一定是类C的友元B. 类C一定是类A的友元C. 类C的成员函数可以访问类B的对象的任何成员D. 类A的成员函数可以访问类B的对象的任何成员5. 类的析构函数是对一个对象进行以下哪种操作时自动调用的是(B)A. 建立B. 撤销C. 赋值D. 引用4. 下列关于静态数据成员的描述中正确的是()A. 静态数据成员是类的所有对象所共有的B. 静态数据成员要在构造函数内初始化C. 类的每个对象有自己的静态数据成员D. 静态数据成员不能通过类的对象调用5. 类B是类A的公有派生类,类A和类B中都定义了虚函数func(),p是一个指向类A对象的指针,则p->A::func()将()A. 调用类A中的函数func()B. 调用类B中的函数func()C. 根据p所指的对象类型而确定调用类A中或类B中的函数func()D. 既调用类A中函数,也调用类B中的函数6.下列描述中,正确的是(C). A. 虚函数是一个static 类型的成员函数   B. 虚函数是一个非成员函数 C. 抽象类是指具有纯虚函数的类          D. 抽象类可以说明其对象7.在C++中继承方式有几中(    C   )      A. 1      B. 2      C. 3      D. 48. 所谓多态性是指 ()A. 不同的对象调用不同名称的函数B. 不同的对象调用相同名称的函数C. 一个对象调用不同名称的函数D. 一个对象调用不同名称的对象10. ( D)不是构造函数的特征 a.构造函数的函数名与类名相同 b.构造函数可以重载 c.构造函数可以设置缺省参数 d.构造函数必须指定类型说明11. 已知:类A中一个成员函数说明如下:  void Set(A&a);  其中,A&的含义是(C )。 a.指向类A的指针为a b.将a的地址值赋给变量Set c.a是类A对象的引用,用来作函数Set()的参数 d.变量A与a按位与作为函数Set()的参数12. 关于虚函数的描述中,(C )是正确的。 a.虚函数是一个static类型的成员函数 b.虚函数是一个非成员函数 c.基类中说明了虚函数后,派生类中将其对应的函数可不必说明为虚函数 d.派生类的虚函数与基类的虚函数具有不同的参数个数和类型13.在公有派生情况下,有关派生类对象和基类对象的关系,不正确的叙述是( C)A.派生类的对象可以赋给基类的对象    B.派生类的对象可以初始化基类的引用C.派生类的对象可以直接访问基类中的成员   D.派生类的对象的地址可以赋给指向基类的指针14.对于类定义class A{public:virtualvoid func1( ){ }void func2( ){ }};class B:public A{public:void func1(){cout<<″class B func 1″<<end1;}virtual voidfunc2( ){cout<<″class B func 2″<<end1;}};下面正确的叙述是(C )A. A::func2( )和B::func1( )都是虚函数   B. A::func2( )和B::func1( )都不是虚函数C. B::func1()是虚函数,而A::func2( )不是虚函数   D.B::func1( )不是虚函数,而A::func2( )是虚函数15.C++中解决命名冲突的机制是:A. 虚基类       B. 虚函数      C. 函数重载       D. 名字空间17、函数重载是指(A )A. 两个或两个以上的函数取相同的函数名,但形参的个数或类型不同B. 两个以上的函数取相同的名字和具有相同的参数个数,但形参的类型可以不同C. 两个以上的函数名字不同,但形参的个数或类型相同D. 两个以上的函数取相同的函数名,并且函数的返回类型相同18、假定AA为一个类,a为该类公有的数据成员,x为该类的一个对象,则访问x对象中数据成员a的格式为(D )         A. x(a)   B. x      C. x->a      D. x.a19.关于类和对象不正确的说法是(c)A.类是一种类型,它封装了数据和操作    B.对象是类的实例C.一个类的对象只有一个                D.一个对象必属于某个类20.下列有关构造函数的描述中,正确的是(B)A.构造函数可以带有返回值            B.构造函数的名字与类名完全相同C.构造函数必须带有参数                D.构造函数必须定义,不能缺省21.如没有使用private关键字定义类的数据成员,则默认为(A    )A.private       B.public    C.protectedD.friend22.假定要对类 AB 定义加号操作符重载成员函数,实现两个 AB 类对象的加法,并返回相加结果,则该成员函数的声明语句为 (B)。A. ABoperator+(AB & a, AB &b)      B. ABoperator+(AB & a) C. operator+(ABa)                        D. AB& operator+( )23. 所谓数据封装就是将一组数据和与这组数据有关操作组装在一起,形成一个实体,这实体 也就是(A) A. 类 B. 对象 C. 函数体 D. 数据块24. 关于对象概念的描述中,说法错误的是(A) A. 对象就是C语言中的结构变量 B. 对象代表着正在创建的系统中的一个实体 C. 对象是类的一个变量 D. 对象之间的信息传递是通过消息进行的25. 在main函数中可以用p.a的形式访问派生类对象p的基类成员a,其中a是(D) A. 私有继承的公有成员 B. 公有继承的私有成员 C. 公有继承的保护成员 D. 公有继承的公有成员 二、程序改错题1、#include<iostream.h>   class Box{   public:voidSetBox(int a,int b){x=a;y=b;}    voidprint(){cout<<x<<y<<endl;}};main(){    Box b;b. SetBox(1.5,1.8);//error:实际参数类型与f1函数的形参类型不一致,应修改为一致。b.print();}2、#include<iostream>using namespace std;class A{   staticint x;   inty;public:   A(inta,int b){      x=a;      y=b;   }   intget(){      returnx+y;   }};x=5;//intA::x=5;int main(){   Aa(1,2);   cout<<a.get()<<endl;   return0;}3、#include <iostream.h> class Test {public: fun(int i,int j) {x=i;y=j;} show() {cout<<"x="<<x; if(y) cout<<",y="<<y<<endl;cout<<endl;}private:int x,y; }; void main() {Test a; a.fun(1);//参数个数不够 a.show(); a.fun(2,4); a.show();}答案:int i,int j调用时,既有一个参数,也有两个参数,且没有重载,所以参数需要带默认值。所以int i,int j错误。 〔修改〕int i,int j=0//注j只要有一个int类型的数据就行。4、#include <iostream>#include <fstream> #include <string> using namespace std; class A {    public:A(const char *na){strcpy(name,na);}     private:char name; }; class B:public A { public:    B(const char *nm):A(nm){}   void show(); }; void B::show() {       cout<<"name:"<<name<<endl; } void main() {    Bb1("B");     b1.show();}答案:private:因为name如果是私有的,在派生类中无法访问,而基类没有提供成员函数来访问 name,所以更改name访问权限为公有或保护,这样对于派生类来说是透明的。 〔修改〕public:或protected: 5、class Student{public:    Student(intn,string nam)    {       num=n;       name=nam;    }    voiddisplay()    {       cout<<"num:"<<num<<endl;       cout<<"name:"<<name<<endl;    }protected:    intnum;    stringname;};class Student_rj:public Student{public:    Student_rj(intn,string nam,int a):Student(n)//Student    {age=a;}    voidshow()    {       display();       cout<<"age:"<<age<<endl;    }private:    intage;}; 三、程序填空题(每空2分,共20分)1、已知一个类的定义如下:#include “iostream”class AA {            int a;            int n;public:            void SetA(int aa[], int nn); //用数组aa初始化数据成员a,                                       //用nn初始化数据成员n            int MaxA( );       //从数组a中前n个元素中查找最大值            void PrintA();    //输出数组a中的前n个元素的最大值};      该类中MaxA()函数的实现如下,请在标号位置补充适当的内容。int __(1)__ // AA::MaxA(){         intx=a;         for(inti=1; i<n; i++)                if(a>x)__(2)__;//x=a         __(3)__;// returnx;}2、class point{private:int m,n;public:point(int,int);point(point&);};point::point(int a,int b){m=a;n =b;}point::point(point&t ){m=t.m;n=t.n;}3、#include <iostream.h> class Base    {   public:       int x;       static const int b;       Base( int, int);       int a;   }; __(2)__b =15;//int Base:: Base::Base(int i,int j): __(2)__{ }// a(i),x(j)int main(){   Baseb(4,5);   return0;}4、在下面程序横线处填上适当内容,使程序执行结果为: S=2 S=5 S=9 #include <iostream.h> voidsum(int i) {static int s; _________;cout<<"s="<<s<<endl; } void main (void) {int i; for(i=0;____;____) sum(i); } 答案:s=s+i+2;,i<3,i++ 〔解析〕根据结果和调用形式,得出规律。注意静态成员能保留上次运行的结果。循环了3次 ,退出循环的条件。 四、程序设计题(每小题10分,共20分)1、编写一个学生类Student,数据成员包括num(学号),name(姓名),sex(性别),年龄(age)。要求用成员函数实现以下功能:(1)构造函数对四个数据成员初始化;(2)display成员函数输出四个数据成员的值;(3)set成员函数可以通过输入的方式改变四个数据成员的值。 2、写一个程序,定义一个抽象类Animal,由它派生3个类:Cat (猫)、Dog(狗)和Sheep (羊)。用虚函数Call分别输出这三种动物的叫声(猫:喵喵,狗:旺旺,羊:咩咩)。要求用基类指针数组,使它每一个元素指向一个派生类对象。

T-X 发表于 2021-8-1 11:26:45

giao。。。真是让人头秃
页: [1]
查看完整版本: C艹参考试题