c++期末复习题

第二章:

第一节:

5、下列关于数据成员的描述中,错误的是_____

A、数据成员的的类型只能是基本数据类型

B、数据成员用于保存数据

C、类中的数据成员之间不能重名

D、类的数据成员也被称作属性

7、对于类中定义的成员,其隐含访问权限为_____

A、protected

B、public

C、static

D、private

10、____是不可以作为该类的数据成员的。

A、另一个类的对象

B、自身类对象的引用

C、自身类的对象

D、自身类对象的指针

第二节:

5、类和对象实现面向对象程序设计的▁▁▁▁▁和▁▁▁▁▁特性。

答案:ADC 封装和抽象

第三章:

第一节:

5、已定义类ABC_____。

  1. class ABC {
  2. private:
  3. int x, y;
  4. public:
  5. ABC(int a, int b) {
  6. x = a;
  7. y = b;
  8. }
  9. };

则下列定义对象语句中,错误的是_____。

A、ABC obj;

B、ABC obj(5, 10);

C、ABC *pobj = new ABC(5, 10);

D、ABC obj(5, 5+5);

第二节:

3、一个类可包含析构函数的个数是_____。

A、至少一个

B、0个或多个

C、1个

D、多个

7、关于new运算符的下列描述中,_____是错误的

A、使用它创建对象时要调用构造函数

B、使用它创建的对象或对象数组必须使用运算符delete删除

C、使用它创建对象数组时必须指定初始值

D、它可以用来动态创建对象和对象数组

第三节:

5、请根据要求把程序补充完整

  1. #include <iostream>
  2. using namespace std;
  3. class A {
  4. int a,b;
  5. public:
  6. A(int x=0,int y=0) {
  7. a=x;
  8. b=y;
  9. }
  10. A( ▁▁▁▁▁ ) {// 完成拷贝功能的构造函数
  11. a=t.a; // 第一个成员等于参数的第一个成员
  12. b=t.a+t.b▁▁▁▁▁; // 第二个成员等于参数的两个成员之和
  13. }
  14. void Set(int,int);
  15. void Print( );
  16. };
  17. void A::Set(intx,inty) {
  18. a=x;
  19. b=y;
  20. }
  21. void A::Print( ) {
  22. cout<<a<<'\t'<<b<<'\n';
  23. }

第四节:

1、Sample是一个类,执行下面语句后,调用Sample类的构造函数的次数是▁▁▁▁▁。 Sample a[2], *q, *p = new Sample;

答案:ACC constA&t b=t.a+t.b 3次

第四、五章:

第一节:

4、下列关于静态成员的描述中,错误的是‍_____。

A、静态数据成员不属于某个对象,是类的共享成员

B、私有静态成员具有块作用域

C、静态数据成员要在类外定义和初始化

D、公有静态成员具有文件作用域

5、在类中声明一个常函数成员fun,下列_____语句是正确的

A、void fun( ) const;

B、void fun( );

C、const void fun( );

D、void const fun( );

6、下列静态数据成员的特性中,_____是错误的

A、静态数据成员在类体外进行初始化

B、静态数据成员初始化时,要在静态数据成员名前加类名和作用域运算符

C、静态数据成员不是所有对象所共享的成员

D、说明静态数据成员时前边要加关键字static来修饰

8、下面有关静态成员函数的描述中,正确的是_____。

A、在建立对象前,就可以为静态数据成员赋值

B、静态成员函数在类外定义是,要用static前缀

C、静态成员函数只能在类外定义

D、在静态成员函数中可以使用this指针

第二节:

1、下面有关友元函数的描述中,正确的说法是_____。

A、在类的外部定义友元函数时必须加上friend关键字

B、一个友元函数不可以同时定义为两个类的友元函数

C、友元函数是独立于当前类的外部函数

D、友元是本类的成员函数

5、如果在主函数main()中有函数调用Point::func();则函数func()是类Point的_____。

A、私有静态成员函数

B、公有静态成员函数

C、公有非静态成员函数

D、友元函数

第三节:

9、通过运算符重载,可以定义新的运算符。错

第四节:

4、下列程序的运行结果为▁▁▁▁▁

  1. #include <iostream>
  2. #include <cstring>
  3. using namespace std;
  4. class Toy {
  5. char name[10];
  6. static int count;
  7. public:
  8. Toy(char* _n) {
  9. strcpy(name, _n);
  10. count++;
  11. }
  12. ~Toy( ) {
  13. count--;
  14. }
  15. char* GetName( ) {
  16. return name;
  17. }
  18. static int getCount( ) {
  19. return count;
  20. }
  21. };
  22. int Toy::count=0;
  23. int main( ) {
  24. Toy t1("Snoopy"), t2("Mickey"), t3("Barbie");
  25. cout<<t1.getCount( )<<endl;
  26. return 0;
  27. }

5、下列程序的运行结果为▁▁▁▁▁,12行对公有静态数据成员的调用obj.a,可改写为▁▁▁▁▁

  1. #include<iostream>
  2. using namespace std;
  3. class A{
  4. public:
  5. static int a;
  6. void init(){a=1;}
  7. A(int a=2){init();a++;}
  8. };
  9. int A::a=0;
  10. A obj;
  11. int main(){
  12. cout<<obj.a;
  13. return 0;
  14. }

第五节:

答案:BACACB 3 1 A::a

第六章:

第一节:

2、下列关于派生类的叙述中,错误的是_____。

A、基类成员被派生类继承以后访问权限保持不变

B、派生类至少要有一个基类

C、派生类中包括了从基类继承的成员

D、一个派生类可以作为另一个派生类的基类

3、下列关于派生类和基类的描述中,正确的是_____。

A、派生类对基类的默认继承方式是公有继承

B、派生类成员函数可以访问基类的所有成员

C、派生类成员函数只能访问基类的公有和保护成员

D、派生类成员函数只能访问基类的公有成员

4、下列关于虚基类的描述中,错误的是___b__。

A、使用虚基类可以消除由多继承产生的二义性

B、声明"class B : virtual public A"说明类B为虚基类

C、建立派生类对象时,首先调用虚基类的构造函数

D、构造派生类对象时,虚基类的构造函数只被调用一次

8、在面向对象程序设计中,实现信息隐蔽是靠_____。

A、对象的继承

B、对象的间接访问

C、对象的分类

D、对象的封装

答案:ACAD

第二节:

2、请按下面注释的提示,在横线处填入适当的内容将类B的构造函数定义补充完整。

  1. class A {
  2. int a;
  3. public:
  4. A(int aa=0) {
  5. a=aa;
  6. }
  7. };
  8. class B: public A {
  9. int b;
  10. A c;
  11. public:
  12. //用aa初始化基类A,用aa+1初始化类对象成员c?
  13. B(int aa):▁▁▁▁▁ { b=aa+2; }
  14. };

3、下列程序的输出结果是▁▁▁▁▁

  1. #include <iostream>
  2. using namespace std;
  3. class Base {
  4. public:
  5. void print ( ) {
  6. cout << "Base";
  7. }
  8. };
  9. class Derived : public Base {
  10. public:
  11. void print ( ) {
  12. cout << "Deri";
  13. }
  14. };
  15. int main( ) {
  16. Derived * pd = new Derived( );
  17. Base * pb = pd;
  18. pb->print( );
  19. pd->print( );
  20. delete pd;
  21. return 0;
  22. }

4、有如下类声明,则类MyDERIVED中受保护的成员的个数是▁▁▁▁▁。

  1. class MyBASE {
  2. private:
  3. int k;
  4. protected:
  5. int x;
  6. public:
  7. void set(int m,int n) {
  8. k=m;
  9. x=n;
  10. }
  11. int get( )const {
  12. return k;
  13. }
  14. };
  15. class MyDERIVED: protected MyBASE {
  16. protected:
  17. int j;
  18. public:
  19. void set(int m, int n,int p) {
  20. MyBASE::set(m,n);
  21. j=p;
  22. }
  23. int get( ) const {
  24. return MyBASE::get( )+j;
  25. }
  26. };

7、下列程序的输出结果是▁▁▁▁▁

  1. #include <iostream>
  2. using namespace std;
  3. class A {
  4. protected:
  5. int n;
  6. public:
  7. A(int x=5) {
  8. n=++x;
  9. }
  10. void show() {
  11. cout<<"A::" <<n;
  12. }
  13. };
  14. class B:public A {
  15. protected:
  16. int n;
  17. public:
  18. B(int x=3) {
  19. n=x*x;
  20. }
  21. void show() {
  22. cout<<"B::" <<n;
  23. }
  24. };
  25. int main() {
  26. B b;
  27. A *p=&b;
  28. p->show();
  29. return 0;
  30. }

答案:A(aa),C(aa+1) BaseDeri 4 A::6

第三节:

1、假设ClassY:publicX,即类Y是类X的派生类,则说明一个Y类的对象时和删除Y类对象时,构造函数和析构函数的执行次序分别为_____。

A、X, Y, Y, X

B、X, Y, X, Y

C、Y, X, X, Y

D、Y, X, Y, X

2、多重继承的构造顺序可分为如下四步,这四个步骤的正确顺序是_____。 (1)所有非虚基类的构造函数按照他们被继承的顺序构造 (2)所有虚基类的构造函数按照他们被继承的顺序构造 (3)所有子对象的构造函数按照他们被继承的顺序构造 (4)派生类自己的构造函数体

A、(2)(4)(3)(1)

B、(4)(3)(2)(1)

C、(2)(1)(3)(4)

D、(3)(4)(1)(2)

5、对于下面的类:

  1. class X {
  2. int a;
  3. public:
  4. X(int x=0) {
  5. a=x;
  6. }
  7. };
  8. class Y: public X {
  9. int b;
  10. public:
  11. Y(int x=0,int y=0): X(y) {
  12. b=x;
  13. }
  14. };

下列语句组中出现语法错误的是____。

A、X *pa=new Y(1,2);

B、Y b1(2,3); X &pa1=b1;

C、Y b1(2,3); X *pa1=&b1;

D、X a2(10); Y b2=a2;

6、以下有关继承的叙述不正确的是____。

A、继承可以实现软件复用

B、虚基类可以解决多继承产生的二义性问题

C、派生类不继承基类的私有成员

D、派生类的构造函数要调用基类的构造函数

答案:ACDC

第四节:

第七章:

第一节:

1、下列哪种C++语法形式不属于多态__d___。

A、对象多态

B、重载运算符

C、重载函数

D、不同函数中定义的同名局部变量

5、关于基类中的虚函数与一般成员函数,正确的是_____。

A、虚函数只能定义一个,而一般成员函数可以多个

B、虚函数与一般成员函数在基类中没什么区别

C、虚函数不能定义函数体,而一般成员函数可以

D、虚函数不能被调用,而一般成员函数可以

7、对虚函数的调用_____。

A、一定使用动态联编

B、必须使用动态联编

C、一定使用静态联编

D、不一定使用动态联编

8、对虚函数使用基类指针或引用,系统使用_____,对虚函数使用对象名调用时,系统使用_____联编。

A、静态联编、静态联编

B、动态联编、动态联编

C、静态联编、动态联编

D、动态联编、静态联编

第三节:

2、对于如下类定义,以下正确的叙述是_____。

  1. class A{
  2. public:
  3. virtual void funcl(){}
  4. void func2(){}
  5. };
  6. class B:public A{
  7. public:
  8. void func1(){cout<<"class Bfunc1"<<endl;}
  9. virtual void func2(){cout<<"class B func2"<<endl;}
  10. };

A、B::func1()是虚函数,A::func2()不是虚函数

B、A::func2()和B::func1()都不是虚函数

C、B::func1()不是虚函数,A::func2()是虚函数

D、A::func2()和B::func1()都是虚函数

8、根据以下要求,填写程序代码使程序能够运行(注:所有标点符号均为英文状态,且符号间无空格) (1)▁▁▁▁▁ 填写完程序后,执行该程序的运行结果为▁▁▁▁▁

  1. #include <iostream>
  2. using namespace std;
  3. class Point {
  4. double x,y;
  5. public:
  6. Point(double X,double Y) {
  7. x=X;y=Y;
  8. }
  9. double Area()const{
  10. return 0.0;
  11. }
  12. };
  13. class Rectangle:public Point {
  14. double w,h;
  15. public:
  16. Rectangle(double X,double Y,double W,double H);//类内声明
  17. double Area()const{
  18. return w*h;
  19. }
  20. };
  21. //类外定义Rectangle类的构造函数
  22. //使用参数初始化列表,实现形参X和Y初始化基类数据成员,W和H初始化派生类新增数据成员
  23. __(1)___{ }
  24. void fun(Point &s){
  25. cout<<"Area="<<s.Area();
  26. }
  27. int main( ) {
  28. Rectangle rec(3.0,5.0,15.0,25.0);
  29. fun(rec);// A
  30. return 0;
  31. }

9、若将第8题中,fun函数头部改为fun(Point *p),则其函数体内的语句因改写为▁▁▁▁▁ 此时,主函数中对fun函数的调用的语句因改写为▁▁▁▁▁

答案:BBDDD

8、Rectangle::Rectangle(double X, double Y, double W, double H) : Point(X, Y), w(W), h(H) Area=0 9、cout<<"Area="<<p->Area(); fun(&rec);

相关推荐
小蜗牛慢慢爬行4 分钟前
有关异步场景的 10 大 Spring Boot 面试问题
java·开发语言·网络·spring boot·后端·spring·面试
荒古前10 分钟前
龟兔赛跑 PTA
c语言·算法
Colinnian14 分钟前
Codeforces Round 994 (Div. 2)-D题
算法·动态规划
Algorithm157614 分钟前
云原生相关的 Go 语言工程师技术路线(含博客网址导航)
开发语言·云原生·golang
用户00993831430119 分钟前
代码随想录算法训练营第十三天 | 二叉树part01
数据结构·算法
shinelord明23 分钟前
【再谈设计模式】享元模式~对象共享的优化妙手
开发语言·数据结构·算法·设计模式·软件工程
დ旧言~29 分钟前
专题八:背包问题
算法·leetcode·动态规划·推荐算法
Monly2130 分钟前
Java(若依):修改Tomcat的版本
java·开发语言·tomcat
boligongzhu31 分钟前
DALSA工业相机SDK二次开发(图像采集及保存)C#版
开发语言·c#·dalsa