1、一 选择题(共 45 题)1对类的构造函数和析构函数描述正确的是( ) 。 A. 构造函数可以重载,析构函数不能重载 B. 构造函数不能重载,析构函数可以重载C. 构造函数可以重载,析构函数也可以重载D. 构造函数不能重载,析构函数也不能重载2 继 承 具 有 ( ) , 即 当 基 类 本 身 也 是 某 一 个 类 派 生 类 时 , 底 层 的 派 生 类 也 会 自动 继 承 间 接 基 类 的 成 员 。 A) 规 律 性 B.传 递 性 C.重 复 性 D.多 样 性3假设 OneClass 为一个类,则该类的复制初始化构造函数的声明语句为( ) 。 A.OneClass(OneC
2、lass p); B. OneClassC. OneClass(OneClass D. OneClass (OneClass * p);4对于结构中定义的成员,其默认的访问权限为( ) 。 A.public B. protected C.private D. static5下面对静态数据成员的描述中,不正确的是( ) 。 A.静态数据成员可以在类体内进行初始化 B.静态数据成员不可以在类体内进行初始化C.静态数据成员能受 private 控制符的作用D.静态数据成员调用前必须初始6. C+中的类有两种用法:一种是类的实例化,即生成类对象,并参与系统的运行;另一种是通过( )派生了新的类。 A.
3、复 用 B.继 承 C.封 装 D.引 用7. 假定 AA 为一个类,a 为该类公有的数据成员,x 为该类的一个对象,则访问 x 对象中数据成员 a 的格式为( ) 。 A. x(a) B. xa C. x-a D. x.a 9. 对于一个类的构造函数,其函数名与类名( )。 A. 完全相同 B. 基本相同 C. 不相同 D. 无关系10. 一个类的构造函数通常被定义为该类的( )成员。 A. 公有 B. 保护 C. 私有 D. 友元11. 一个类的析构函数通常被定义为该类的( )成员。 A. 私有 B. 保护 C. 公有 D. 友元12. 一个类的静态数据成员所表示属性 ( )。 A. 是类
4、的或对象的属性 B. 只是对象的属性C. 只是类的属性 D. 类和友元的属性 13.类的析构函数的作用是( ) 。A一般成员函数 B类的初始化 C对象初始化 D删除对象之前的善后工作14.下列对基类和派生类关系的描述中,错误的是( ) 。 A派生类是基类的具体化 B派生类是基类的子集C派生类是基类定义的延续 D派生类是基类的组合15.下列对派生类的描述中,错误的是( ) 。 A一个派生类可以作为另一个派生类的基类 B派生类至少有一个基类C派生类的缺省继承方式是 private D派生类只继承了基类的公有成员和保护成员16.下列对继承的描述中,错误的是( ) 。 A析构函数不能被继承B派生类也是
5、基类的组合C派生类的成员除了它自己的成员外,还包含了它的基类的成员D派生类中继承的基类成员的访问权限到派生类保持不变17.派生类的对象对它的基类成员中( )是可以访问的。 A公有继承的公有成员 B公有继承的私有成员C公有继承的保护成员 D私有继承的公有成员18.下列说法错误的是( ) 。 A公有继承的基类中的 public 成员在派生类中仍是 public 的B公有继承的基类中的 private 成员在派生类中仍是 private 的C私有继承的基类中的 public 成员在派生类中仍是 private 的D保护继承的基类中的 public 成员在派生类中仍是 protected 的19.下面
6、叙述错误的是( ) 。 A基类的 protected 成员在派生类中仍然是 protectedB基类的 protected 成员在 public 派生类中仍然是 protected 的C基类的 protected 成员在 private 派生类中是 private 的D基类的 protected 成员不能被派生类的对象访问20设置虚基类的声明中,正确的是( ) 。 A.简 化 程 序 B.消 除 二 义 性 C.提 高 运 行 效 率 D.减 少 目 标 代 码21关于虚函数的描述中,正确的是() 。 A虚函数是一个静态成员函数B虚函数是一个非成员函数C虚函数即可以在函数说明定义,也可以在函数
7、实现时定义D派生类的虚函数与基类中对应的虚函数具有相同的参数个数和类型22下列描述中, ( )是抽象类的特征。 A可以说明虚函数 B可以进行构造函数重载 C可以定义友元函数 D不能说明其对象23. 静态数据成员的初始化是在( )中进行的。 A. 构造函数 B. 任何成员函数C. 所属类 D. 全局区24. 当将一个类 A 或函数 f()说明为另一个类 B 的友元后,类 A 或函数 f()能够直接访问类B 的( ) 。 A. 只能是公有成员 B. 只能是保护成员 C. 只能是除私有成员之外的任何成员 D. 具有任何权限的成员25. 在重载一个运算符时,其参数表中没有任何参数,这表明该运算符是(
8、) 。 A. 作为友元函数重载的 1 元运算符 B. 作为成员函数重载的 1 元运算符C. 作为友元函数重载的 2 元运算符 D. 作为成员函数重载的 2 元运算符26. 关于运算符重载,下列说法正确的是( ) 。 A. 重载时,运算符的优先级可以改变。B. 重载时,运算符的结合性可以改变。C. 重载时,运算符的功能可以改变。D. 重载时,运算符的操作数个数可以改变。27. 从一个基类派生出的各个类的对象之间( )。 A. 共享所有数据成员,每个对象还包含基类的所有属性B. 共享部分数据成员,每个对象还包含基类的所有属性C. 不共享任何数据成员,但每个对象还包含基类的所有属性D. 共享部分数据
9、成员和函数成员28. C+的继承性允许派生类继承基类的( ) 。 A. 部分特性,并允许增加新的特性或重定义基类的特性B. 部分特性,但不允许增加新的特性或重定义基类的特性 C. 所有特性,并允许增加新的特性或重定义基类的特性D. 所有特性,但不允许增加新的特性或重定义基类的特性29. 派生类的成员函数可以直接访问基类的( )成员。 A. 所有 B. 公有和保护 C. 保护和私有 D. 私有30. 当派生类中有和基类一样名字的成员时,一般来说, ( ) 。 A. 将产生二义性 B. 派生类的同名成员将覆盖基类的成员C. 是不能允许的 D. 基类的同名成员将覆盖派生类的成员31关于纯虚函数和抽象
10、类的描述中,错误的是( ) 。 A纯虚函数是一种特殊的虚函数,它没有具体的实现B抽象类是指具体纯虚函数的类C一个基类中说明有纯虚函数,该基类派生类一定不再是抽象类D抽象类只能作为基类来使用,其纯虚函数的实现由派生类给出32如果一个类至少有一个纯虚函数,那么就称该类为( ) 。 A抽象类 B虚函数 C派生类 D以上都不对33要实现动态联编,必须通过( )调用虚函数。 A对象指针 B成员名限定 C对象名 D派生类名 34.以下( )成员函数表示虚函数。 Avirtual int vf(int); Bvoid vf(int)=0;Cvirtual void vf()=0; Dvirtual void
11、 vf(int) ; 40.下面描述中,正确的是( ) 。 Avirtual 可以用来声明虚函数B含有纯虚函数的类是不可以用来创建对象的,因为它是虚基类C即使基类的构造函数没有参数,派生类也必须建立构造函数D静态数据成员可以通过成员初始化列表来初始化35. 在成员函数中进行双目运算符重载时,其参数表中应带有( )个参数。A. 0 B. 1 C. 2 D. 336. 在重载一运算符时,若运算符函数的形参表中没有参数,则不可能的情况是( ) 。A. 该运算符是一个单目运算符。 B. 该运算符函数有一个隐含的参数 this。C. 该运算符函数是类的成员函数。 D. 该运算符函数是类的友元函数。37.
12、 下面对于友元函数描述正确的是( ) 。 A友元函数的实现必须在类的内部定义B友元函数是类的成员C友元函数破坏了类的封装性和隐藏性D友元函数不能访问类的私有成员38.为了使类中的某个成员不能被类的对象通过成员操作符访问,则不能把该当成员的访问权限定义为( ) 。 Apublic Bprotected Cprivate Dststic39.下面对静态数据成员的描述中,正确的是( ) 。A静态数据成员是类的所有对象共享的数据B类的每一个对象都有自己的静态数据成员C类的不同对象有不同的静态数据成员值D静态数据成员不能通过类的对象调用40.C+类体系中,不能被派生类继承的有( ) 。 A构造函数 B虚
13、函数 C静态成员函数 D赋值操作函数41 下列虚基类的声明中,正确的是( ) 。 Aclass virtual B:public A Bvirtual class B:public ACclass B:public A virtual Dclass B: virtual public A 42 在下面的表达式中,不表示虚继承的是( ) 。Avirtual public Bpublic virtualCpublic D virtual43.下列关于动态联编的描述中,错误的是( ) 。A动态联编是以虚函数为基础B动态联编是运行时确定所调用的函数代码的C动态联编调用函数操作是指向对象的指针或对象引用
14、D动态联编是在编译时确定操作函数的44.下面 4 个选项中, ( )是用来声明虚函数的。 Avirtual Bpublic Cusing Dfalse45.编译时的多态性可以通过使用( )获得。 AA虚函数和指针 B重载函数和析构函数C虚函数和对象 D虚函数和引用二 填空题(共 33 题)1.重载插入运算符struct abchar a5;float b;void main()ab x=“Li“,89.6;coutstruct abchar a ;float b;void f(ab y.b=90.5;void main()ab x=L,89.5;f(x);cout#includeclass A
15、 char a;public:A(char *s) a=new charstrlen(s)+1;strcpy(a,s);coutint n=0;class A int a;public:A(int aa=0) a=aa; n+;A() n-;coutclass A int a,b; public:A( )a=b=0;coutclass BB int a,b;public:BB(int i=0,int j=1) a=i; b=j;BB operator +(BB c) BB d;d.a=a + c.a*10; d.b=b+c.b*10;return d;BB operator -(BB c) B
16、B d;d.a=a * c.a; d.b=b*c.b;return d;void show()coutclass EX intx,y;public:EX(int i=0,int j=1) x=i; y=j;EX operator * (EX z) EX d;d.x=x *z.x; d.y=y*z.y;return d;EX operator /(EX c) EX d;d.x=x-c.x; d.y=y-c.y;return d;void show()coutclass Pointint x,y;public:Point()x=1;y=1;Point()cout#include int count
17、=0;class Point int x,y;public:Point() x=1; y=1;count+;Point()count-;;void display() cout class EX1 int a,b; public:EX1 ( )a=b=1; cout#include class Csample int i;public:Csample() cout class Csampleprivate:int i;static int k;public:Csample( );void Display( );int Csample:k=0;Csample:Csample( )i=0;k+;v
18、oid Csample:Display( )cout#includestruct A char c 20 ; float f; ;void f(A t.f=70.5;void main() A z=“LIMING”,77.5;f(z);coutclass Csampleint i;public:Csample( );void Display( );Csample();Csample:Csample( ) coutclass base public:void show() coutclass ROOT public:int small;ROOT(int n=2) small=n;void sho
19、wsmall() cout#include class CD char *a; char b20;public:CD() a=new char10; strcpy(a,“ 喂,“);strcpy(b,“你好!“);void Init(char* aa, char *bb) a=new charstrlen(aa)+1;strcpy(a,aa);strcpy(b,bb); void Output() coutclass A int a;public:A(int aa=0): a(aa) coutclass A int a10; int n;public:A(int aa, int nn): n(
20、nn) for(int i=0; iclass BB int a,b;public:BB(int i=0,int j=1) a=i; b=j;BB operator +(BB c) BB d; d.a=a + c.a; d.b=b+c.b; return d;BB operator -(BB c) BB d; d.a=a - c.a; d.b=b-c.b; return d;void show()cout#include class Point int x,y;public:Point(int x1=0, int y1=0) :x(x1), y(y1) coutclass Croot publ
21、ic: int x;Croot( ) x=2;coutclass Croot public:int small;Croot( ) small=2;coutstruct stud int no;char name20;int math;int eng;int c;int sum; st10;int n=-1; /表示数组元素当前下标void main() int x=1,i,j;stud t;coutx;if(x) n+; /读入学号stn.no=x; /读入姓名cinstn.namestn.mathstn.engstn.c; /读入三门课成绩stn.sum=stn.math+stn.eng+s
22、tn.c; /计算三门课总分else break;for(i=0;istj+1.sum)t=stj;stj=stj+1;stj+1=t;for(i=0;iclass Mammal public:Mammal() cout#include#includeclass base /定 义 一 个 基 类protected:char name20; /姓名char sex3; /性别int age; /年龄 ;class teacher:public base /基 类 派 生 出 教 师 类 int sno; /工号char zc20; /职称double wages; /工资 ;class stu
23、dent :public base /基 类 派 生 出 学 生 类 int sno; /学号char bj10; /班级char zy10; /专业double score; /入学成绩 ;4. 建立一个基类 Building ,用来存储一座楼房的层数、房间数以及它的总平方英尺数。建立派生类Housing,继承 Building,并存储下面的内容:卧室和浴室的数量,另外,建立派生类 Office,继承Building,并存储灭火器和电话的数目。然后,编制应用程序,建立住宅楼对象和办公楼对象,并输出它们的有关数据。程序代码:#include class Buildingpublic:Build
24、ing(int f,int r,double ft)floors=f;rooms=r;footage=ft;void show() cout#define PI 3.1415926#includeclass base /抽象基类 B0 声明 public: /外部接口virtual void display( )= 0; /纯虚函数成员;class circle:public base /公有派生 protected:double r,s,p;public: circle(double x=0) r=x;void display( ) coutdisplay( ); void main( )
25、/主函数 base *p; /声明抽象基类指针circle b1(10); /声明派生类对象incircle d1(9); /声明派生类对象outcircle e1(10);p= fun(p);p= fun(p);p= fun(p);6. 分别用成员函数和友元函数重载运算符,使对实型的运算符=、+、-、*、/ 适用于复数运算。用友元成员函数重载运算符,使对实型的运算符+、-适用于复数运算。程序:#includeclass complex /复 数 类 声 明 public: complex(double r=0.0,double i=0.0)real=r;imag=i; /构 造 函 数fri
26、end complex operator+(complex c1,complex c2);/运 算 符 “+“重 载 友 元 函 数friend complex operator-(complex c1,complex c2);/运 算 符 “-“重 载 友 元 函 数void display( ); /显 示 复 数 的 值 private: /私 有 数 据 成 员double real;double imag;void complex:display( ) /显 示 函 数 实 现 cout#includeclass Point public:Point(int a=0, int b=0
27、) x=a; y=b; int xcord() return x;int ycord () return y;private:int x,y;class Distance public:Distance(Point q1,Point q2);double getdist() return dist; private:Point p1,p2;double dist;Distance:Distance(Point q1,Point q2):p1(q1),p2(q2) double x=double(p1.xcord()-p2.xcord();double y=double(p1.ycord()-p
28、2.ycord();dist=sqrt(x*x+y*y);void main() Point p(0,0),q(1,1);Distance dis(p,q);cout#includeclass Pointpublic:Point(int a=0, int b=0) x=a; y=b; int xcord() return x;int ycord () return y;private:int x,y;friend double Distance(Point p1,Point p2);double Distance(Point p1,Point p2) double dx=double(p1.x
29、-p2.x);double dy=double(p1.y-p2.y);return sqrt(dx*dx+dy*dy);void main() Point q1(0,0),q2(1,1);coutclass rectangle int len,wid;public:rectangle(int i=0,int j=0) len=i;wid=j;friend int area(rectangle temp) int s=temp.len*temp.wid;return s;friend fun(rectangle temp)int p=2*(temp.len+temp.wid);return p;
30、void main() rectangle a(10,20);coutclass Counter int n;public:Counter(int i=0) n=i;void init_Counter(int m) n=m;void in_Counter() n+;void de_Counter() n-;int get_Counter() return n;void show() coutclass rectangle int len,wid;public:rectangle(int i=0,int j=0) len=i;wid=j;friend int area(rectangle tem
31、p) int s=temp.len*temp.wid;return s;friend fun(rectangle temp)int p=2*(temp.len+temp.wid);return p;void main() rectangle a(10,20);coutclass fac int p;public:fac() p=1;fac( int j)p=1;if(j=0) for(int i=1 ;in;fac a(n);coutusing namespace std;class Tdateint year,month,day;public:Tdate(int y=2008,int m=1
32、,int d=1)year=y;month=m;day=d;void set_Tdate(int y=2000,int m=12,int d=30)year=y;month=m;day=d;void display()coutclass Pointpublic:Point() X=Y=0; int GetX() return X; int GetY() return Y; PointPoint operator +(int);PointPoint operator -(int);void Print() cout#includeclass onestr protected:char str13
33、0;public:onestr(char *p)strcpy(str1,p);class twostr:public onestr char str240;public:twostr(char *q1,char *q2):onestr(q1)strcpy(str2,q2);void display() strcat(str2,str1);coutclass Buildingpublic:Building(int f,int r,double ft)floors=f;rooms=r;footage=ft;void show() coutclass squarefloat r,s;public:s
34、quare(float r1=0)r=r1;float area() s=3r*r;return s; friend double subarea(square ;void main()square obj1(10);square obj2(5);cout#define PI 3.1415926class base /抽象基类 B0 声明 public:virtual void display( )= 0;/纯虚函数成员;class circle:public base /公有派生 protected: double r,s,p;public: circle(double x=0) r=x;v
35、oid display( ) coutdisplay( ); void main( ) /主函数 base *p; /声明抽象基类指针circle b1(10); /声明派生类对象outcircle e1(10);p= fun(p);p= fun(p);18. 利用一个二进制文件保存 10 个 100 以内的整数(数据用键盘输入) 。程序:#include #include #include void main ( ) ofstream file1 ; / 定义输出文件流 file1。file1.open ( “e:write1 .dat “,ios:out|ios:binary ) ;if ( ! file1 ) cerr n;file1.write(char *) file1.close ( ) ;