第一章C++基础

1-01_计算机求解问题的过程随堂测验

1、遇到一个问题后,应先分析问题、设计算法,然后再编写程序。

1-02_编程的步骤随堂测验

1、下列说法正确的是( )。
    A、包含源代码的程序文件称为源文件
    B、包含源代码的程序文件称为可执行文件
    C、编译后生成的文件是可执行程序
    D、连接后生成的文件是可执行程序

2、程序设计过程是指编写程序的过程。

1-03_程序设计方法随堂测验

1、下列说法正确的是( )。
    A、面向对象程序设计方法也成为面向过程的程序设计方法
    B、面向对象程序设计方法的设计思想是“自顶向下、逐步求精”
    C、面向对象程序设计方法最重要的两个概念是类和对象
    D、面向对象方法中,类是具有相同类型的对象的抽象

2、面向对象程序设计方法中也会使用结构化程序设计方法。

1-04_程序设计基本概念随堂测验

1、下列说法正确的是( )。
    A、计算机所完成的每一个基本动作称为一条指令
    B、机器语言是计算机可以读懂的语言
    C、高级语言编写的程序必须通过特定翻译程序翻译成机器语言后才能被计算机读懂
    D、汇编语言和C++语言都是高级程序设计语言

2、面向对象的英文缩写是OOP。

1-05_C++程序集成开发环境简介随堂测验

1、下列VS2010集成开发环境的说法中,正确的是( )。
    A、一个解决方案中仅能包含一个项目
    B、一个解决方案中可以包含多个项目
    C、一个项目中可以包含多个C++源文件
    D、一个项目中仅能包含一个C++源文件

2、调试主要是为了解决源程序编译连接时产生的错误。

1-07_C++源程序的组成随堂测验

1、下列说法正确的是( )。
    A、使用cin和cout进行标准输入输出时必须包含头文件iostream
    B、在编写一个控制台应用程序时,程序中有且只能有一个main函数
    C、在一个控制台应用程序中,可以有多个main函数
    D、一条C++语句中可以定义多个不同类型的变量

2、C++程序中使用cin和cout除了要包含头文件iostream外,还要指定使用std命名空间。

1-08_C++源程序的组成元素随堂测验

1、下列说法正确的是( )。
    A、C++字符集中包括汉字
    B、C++中myname和Myname表示不同的标识符
    C、_name是一个合法的C++标识符
    D、1name是一个合法的C++标识符

2、C++中用户定义的标识符可以与系统关键字同名。

1-09_C++与C的主要差异 – 符号常量和标准输入输出流随堂测验

1、已知:const double PI=3.14;则以下语句中正确的是( )。
    A、double a=2*PI;
    B、PI=3.14159;
    C、cin>>PI;
    D、cout<<PI;

2、cin后面的符号是<<。

1-10_C++与C的主要差异 – 内联函数随堂测验

1、下列说法正确的是( )。
    A、定义内联函数需要在函数声明处加上inline关键字
    B、定义内联函数需要在函数定义处加上inline关键字
    C、内联函数是为了避免函数调用所引起的额外时间开销
    D、内联函数中不能包括循环、switch等复杂结构控制语句

1-11_C++与C的主要差异 – 带默认形参值的函数随堂测验

1、在C++中,关于下列设置参数默认值的描述中,正确的是( )。
    A、不允许设置参数的默认值
    B、设置参数默认值只能在定义函数时设置
    C、设置参数默认值时,应该是先设置右边的再设置左边的
    D、设置参数默认值时,应该全部参数都设置

2、已知函数调用f(3,4,5)是正确的函数调用,则下列选项中函数f可能的声明形式包括( )。
    A、void f(int a, int b, int c);
    B、void f(int a, int b, int c=10);
    C、void f(int a=20, int b, int c=10);
    D、void f(int a, int b, int c=10, int d=20);

3、默认形参值应在函数定义处指定。

1-12_C++与C的主要差异 – 函数重载随堂测验

1、对定义重载函数的下列要求中,( )是错误的。
    A、要求参数的个数不同
    B、要求参数中至少有一个类型不同
    C、要求参数个数相同时,参数类型不同
    D、要求函数的返回值不同

2、下列选项中,正确的函数重载包括( )。
    A、void f(int a)和int f(int a)
    B、void f(int a, int b)和void f(int a)
    C、void f(int a, int b=5)和void f(int a)
    D、void f(int a)和void f(double a)

3、函数的参数个数和类型都相同,只是返回值不同,这不是重载函数。

1-13_C++与C的主要差异 – 动态内存分配和释放随堂测验

1、下列语句中正确的是( )。
    A、int *p=new int(3);
    B、int *p=new int[3];
    C、int *p=new int[3](3)
    D、int *p=new int[];

2、int *p=new int[5];表示为指针变量p分配了一个int型元素空间,并将该片内存空间的值初始化为5。

1-15_C++与C的主要差异 – 引用和返回引用的函数随堂测验

1、下列表示引用的方法中,( )是正确的。 已知:int k=1000;
    A、int &x=k;
    B、char &y;
    C、int &z=1000;
    D、float &t=&k;

2、已知int a=10; int &r=a;,则下列语句中,能够将变量a的值设置为3的语句包括( )。
    A、r-=7;
    B、a-=7;
    C、&r=3;
    D、a=3

3、引用是某个变量的别名。对引用的操作,实质上就是对被引用的变量的操作。

1-16_C++与C的主要差异 – 函数的引用调用随堂测验

1、已知函数: void f(int a, int &b) {a+=2; b+=2;},变量int x=3, y=5;,则以下说法正确的是( )。
    A、执行f(x,y)后,x的值是5
    B、执行f(x,y)后,x的值是3
    C、执行f(x,y)后,y的值是7
    D、执行f(x,y)后,y的值是5

第一章单元测试

1、在C++中,关于下列设置参数默认值的描述中,正确的是( )。
    A、不允许设置参数的默认值
    B、设置参数默认值只能在定义函数时设置
    C、设置参数默认值时,应该是先设置右边的再设置左边的
    D、设置参数默认值时,应该全部参数都设置

2、对定义重载函数的下列要求中,( )是错误的。
    A、要求参数的个数不同
    B、要求参数中至少有一个类型不同
    C、要求参数个数相同时,参数类型不同
    D、要求函数的返回值不同

3、下列对重载函数的描述中,( )是错误的。
    A、重载函数中不允许使用默认参数
    B、重载函数中编译时根据参数表进行选择
    C、不要使用重载函数来描述毫无相干的函数
    D、构造函数重载将会给初始化带来多种方式

4、下列表示引用的方法中,( )是正确的。 已知:int k=1000;
    A、int &x=k;
    B、char &y;
    C、int &z=1000;
    D、float &t=&k;

5、下列引用的定义中,( )是错误的。
    A、int i; int &j=i;
    B、int i; int &j; j=i;
    C、float i; float &j=i;
    D、char d; char &k=d;

6、已知:const double PI=3.14;则以下语句中正确的是( )。
    A、double a=2*PI;
    B、PI=3.14159;
    C、cin>>PI;
    D、cout<<PI;

7、已知函数声明void f(int a, int b=10, int c=20, int d=30);,则下列函数调用中正确的是( )。
    A、f(3)
    B、f(3,,5)
    C、f(3,4,5,6)
    D、f()

8、下列选项中,正确的函数重载包括( )。
    A、void f(int a)和int f(int a)
    B、void f(int a, int b)和void f(int a)
    C、void f(int a, int b=5)和void f(int a)
    D、void f(int a)和void f(double a)

9、已知int a=10; int &r=a;,则下列语句中,能够将变量a的值设置为3的语句包括( )。
    A、r-=7;
    B、a-=7;
    C、&r=3;
    D、a=3

10、一个算法必须能在有限步骤内解决问题。

11、源程序编译后会生成可执行程序。

12、面向对象的英文缩写是OOP。

13、调试主要是为了解决程序运行时产生的错误。

14、cin后面的符号是<<。

15、默认形参值应在函数定义处指定。

16、返回引用的函数可以返回局部变量。

第一章 编程练习(选择结构)

1、编程题。

2、编程题。

3、编程题。

4、编程题。

5、编程题。

6、编程题。

7、编程题。

8、编程题。

9、编程题。

10、编程题。

第一章 编程练习(迭代结构)

1、编程题。

2、编程题。

3、编程题。

4、编程题。

5、编程题。

6、编程题。

第一章 编程练习(数组和结构体1)

1、任意输入一个3*3整数矩阵,输出其转置。

2、任意输入一个只含有数字和字母的字符串,去掉其中的数字,并将其所有字母变为大写,再将其输出。

3、依次输入一组正整数,每输入一个数字,就输出当前输入所有数字中最小的数字,直到输入0结束。

4、输入三个正整数,输出它们中所含有各个数字的数量。

5、输入多个人的信息,按顺序为姓名,性别(男/女),身高(cm),体重(kg),体育成绩(0-100)。现在要筛选礼仪队成员,要求性别为女,身高不低于165cm,体重不高于60kg,体育成绩不低于80分,输出满足条件的学生姓名,或者输出“没有满足条件的学生”。

第一章 编程练习(数组和结构体2)

1、任意输入五个两位整数,输出其中可以被3整除的整数,如果不存在,则输出“没有满足条件的整数”

2、任意输入一个3*3整数矩阵,输出其对角线上的元素。

3、给出正整数n<15 n>

4、输入三个字符串,将它们排序后输出。

5、一件物品有三个属性,分别是重量,体积和价值,背包的最大承受重量为80,背包的最大承受体积为80,每一件物品的重量和体积都小于背包的最大限度,求如何装使得背包内价值总和最大的方案。

第一章 编程练习(函数1)

1、计算分组的组合数,即从n个不同元素中取出m[1],m[2],…,m[5]个元素分成有顺序的5组的所有组合数,其计算公式为n!/(m[1]!*m[2]!*…*m[5]!(n-m[1]-m[2]-…-m[5])!)。

2、对于给定的三角形两边和夹角(单位:角度),利用余弦定理求其第三边的长度。计算公式为c=sqrt(a*a+b*b-2*a*b*cos(x))。注意:C++中的cos函数操作的是弧度而非角度,转换公式为弧度=角度/180*pi。

3、输入两个字符串,输出它们的长度,比较它们是否长度相等,如果相等,将第一个字符串接到第二个字符串之后,如果不等,将第二个字符串接到第一个字符串之后,输出最终的字符串。注:c++自带库函数strlen返回字符串长度,strcat连接字符串,具体用法可以自行查询。

4、角谷猜想:输入一个正整数,如果为偶数就对它除以2,如果是奇数就对它乘3再加一,以此反复。经过有限次运算之后,总可以得到1。利用递归函数求这个正整数第一次得到1经过的运算次数。

5、使用递归函数实现10进制正整数m到n进制正整数的转换。

6、一个人有一堆核桃,他第一天吃了这堆核桃的一半再额外加上一个,第二天吃了剩下的核桃的一半,再额外加上一个,当他第n天准备吃的时候,发现核桃只剩下一个了。请问一共有多少个核桃。

第一章 编程练习(指针)

1、编写需要的函数,主函数已给出。

2、编写需要的函数,主函数已给出。

3、编写需要的函数,主函数已给出。

4、编写需要的函数,主函数已给出。

5、编写需要的函数,主函数已给出。

6、编写需要的函数,主函数已给出。

7、编写需要的函数,主函数已给出。

第二章面向对象方法

2-01_面向对象方法基本概念 – 对象、类、实例和消息随堂测验

1、下面关于对象概念的描述中,( )是错误的。
    A、对象就是C语言中的结构变量
    B、对象代表着正在创建的系统中的一个实体
    C、对象是一个状态和操作(或方法)的封装体
    D、对象之间的信息传递是通过消息进行的

2、C++对C语言做了很多改进,下列描述中( )使得C语言发生了质变,即从面向过程变成面向对象。
    A、增加了一些新的运算符
    B、允许函数重载,并允许设置默认参数
    C、规定函数说明必须用原型
    D、引进类和对象的概念

3、下列说法正确的是( )。
    A、面向对象方法的基本观点是一切系统都是由对象构成的
    B、面向对象方法的基本观点是一切系统都是由模块构成的
    C、面向对象方法中通过“消息”来触发行为
    D、面向对象方法中用类和对象来表示现实世界

4、在面向对象程序设计中,具有相同属性和方法的一组对象的集合称为类。

2-02_面向对象方法基本概念 – 封装、继承和多态随堂测验

1、面向对象程序设计思想的主要特征中不包括( )。
    A、封装性
    B、多态性
    C、继承性
    D、功能分解,逐步求精

2、下列关于C++类的描述中错误的是( )。
    A、类与类之间可以通过一些手段进行通信和联络
    B、类用于描述事物的属性和对事物的操作
    C、类与类之间必须是平等的关系,而不能组成层次关系
    D、类与类之间可以通过封装而具有明确的独立性

3、对象的核心概念就是通常所说的()。
    A、继承
    B、封装
    C、传递
    D、多态

2-03_类的定义随堂测验

1、有下面类的说明,有错误的语句是( )。 class X { A.int a=2; B.X(); public: C.X(int val); D.~X(); };
    A、A
    B、B
    C、C
    D、D

2、下面程序段中是内联函数的是( )。 class location { private: int x ,y; public: void init(int initx,int inity) { x=initx; y=inity; } int getx(){return x;} int gety(); }; inline int location::gety() {return y;}
    A、init (int initx,int inity)
    B、getx(),gety()
    C、A和B都是
    D、A和getx()

3、下列说法正确的是( )。
    A、数据成员用来描述对象的状态
    B、成员函数用来描述对象的行为
    C、定义类需要使用class关键字
    D、类中的所有成员必须采有相同的访问控制方式

4、在类体中可以在声明成员变量的同时为其赋初值。

2-04_构造函数随堂测验

1、声明一个类的对象时,系统自动调用( )函数。
    A、成员函数
    B、构造函数
    C、析构函数
    D、普通函数

2、已知X类.则当程序执行到语句X *array[3];时,调用了( )次构造函数。
    A、0
    B、1
    C、2
    D、3

3、下列( )是构造函数的特征。
    A、构造函数在创建对象时自动调用
    B、构造函数不可以重载
    C、构造函数不可以设置默认参数
    D、构造函数必须指定函数类型

4、下面对构造函数的正确描述是( )。
    A、系统可以提供默认的构造函数
    B、构造函数可以有参数,所以可以有返回值
    C、构造函数可以重载
    D、构造函数可以设置默认参数

5、一个类的构造函数中可以不包含对其子对象的初始化。

2-05_对象的定义和访问随堂测验

1、已知X类中的一个成员函数说明如下: void Set(X*a); 其中,X*a的含义是( )。
    A、a是指向X类对象的指针,用来作为Set()的形参
    B、将X*a的计算结果传递给Set()函数
    C、a是X类对象的引用,用来做为Set()的形参
    D、以上都不对

2、对于下面定义的类A在函数f()中将对象成员n的值修改为60的语句应该是( ) class A { public: A(int x){n=x;} void SetNum(int n1){n=n1;} private: int n; } int f() { A*ptr=new A(6); }
    A、A(60)
    B、SetNum(60)
    C、ptr->SetNum(60)
    D、ptr->n=60

3、已知Cirle是一个类,其中有一个成员函数public:void setRadius(int r),且有如下变量定义语句Circle c, pC=&c;则下列语句正确的是( )。
    A、c::setRadius(3)
    B、pC->setRadius(3)
    C、pC.setRadius(3)
    D、c.setRadius(3)

4、说明或定义对象时,类名前面不需要加class关键字。

2-07_类成员的访问控制随堂测验

1、在类定义的外部,可以被访问的成员有( )。
    A、所有类成员
    B、private或protected的类成员
    C、public的类成员
    D、public或private的类成员

2、在类的定义形式中,数据成员、成员函数和( )组成了类定义体。
    A、成员的访问控制信息
    B、公有消息
    C、私有消息
    D、保护消息

3、类的成员函数中可以直接访问本类的( )。
    A、公有成员
    B、保护成员
    C、私有成员函数
    D、私有成员变量

4、使用关键字class定义的类中默认的访问权限是私有(private)的。

2-09_析构函数随堂测验

1、下面对析构函数的正确描述是( )。
    A、系统不能提供默认的析构函数
    B、析构函数必须由用户定义
    C、析构函数没有参数
    D、析构函数可以设置默认参数

2、对于任意一个类,析构函数的个数最多为( )。
    A、0
    B、1
    C、2
    D、3

3、构造函数和析构函数都不能重载。

2-10_拷贝构造函数随堂测验

1、通常拷贝构造函数的参数表是( )。
    A、某个对象名
    B、某个对象的成员名
    C、某个对象的引用名
    D、某个对象的指针名

2、关于下面程序段说法正确的是( ) class X { private: int n; public: X(X&); }; X::X(X&x) {n=x.n} X obj1,obj2(obj1);
    A、语句obj2(obj1);的功能是用对象obj1初始化具有相同类类型的对象obj2
    B、语句obj2(obj1);的功能是用对象obj2初始化具有相同类类型的对象obj1
    C、X(X&x)中的&符号可以删除
    D、X(X&x)函数中不能访问对象的私有成员

3、系统提供的默认拷贝构造函数实现的是“浅拷贝”,下列关于浅拷贝的说法中正确的是( )。
    A、当一个类中有指针成员变量时,浅拷贝有可能会导致一片内存被重复释放
    B、当一个类中有指针成员变量时,浅拷贝有可能导致一个对象中保存的数据不正确
    C、如果一个类中只有int型和double型的成员变量,则浅拷贝不会出现任何问题
    D、如果一个类中有一个成员变量是char型数组,则使用浅拷贝会存在问题

4、拷贝构造函数通常使用已有对象的引用来初始化创建中的对象。

2-11_类声明和类实现的分离随堂测验

1、下列说法中正确的是( )。
    A、成员函数的声明必须放在类体中
    B、成员函数的声明可以放在类体中也可以放在类体外
    C、成员函数的实现必须放在类体中
    D、成员函数的实现可以放在类体中也可以放在类体外

2、一般将C++中的类声明和类实现分别放到两个文件中。

2-12_类的常量成员随堂测验

1、下列关于类的常量数据成员的说法中,正确的是( )。
    A、一个类的常量数据成员必须在类体中初始化
    B、一个类的常量数据成员由该类的所有对象共享
    C、一个类的常量数据成员对于该类的不同对象可以取不同的值
    D、使用const关键字可以将一个数据成员声明为常量数据成员

2、类的常量数据成员的值只能在创建对象时初始化,初始化后不得再修改。

2-13_类的静态数据成员随堂测验

1、下列静态数据成员的特性中,( )是错误的。
    A、说明静态数据成员时前边要加关键字static来修饰
    B、静态数据成员在类体外进行初始化
    C、引用静态数据成员时,要在静态数据成员名前加<类名>和作用域运算符
    D、静态数据成员不是所有对象所共有的

2、静态成员遵循类的其他成员所遵循的访问限制,除了( )。
    A、静态成员函数
    B、静态数据成员初始化
    C、私有静态数据成员
    D、公有静态成员函数

3、下列关于类的静态数据成员的说法中,正确的是( )。
    A、静态数据成员的值初始化后不能再修改
    B、静态数据成员必须在类体外定义和初始化
    C、使用static关键字可以将一个数据成员声明为静态数据成员
    D、静态数据成员的访问控制权限可以是公有、私有或保护

4、可以在类的构造函数中对静态数据成员进行初始化。

2-14_类的静态成员函数随堂测验

1、对静态成员的不正确描述是( )。
    A、静态成员不属于对象,是类的共享成员
    B、静态数据成员要在类外定义和初始化
    C、调用静态成员函数时要通过类或对象激活,所以静态成员函数拥有this指针
    D、非静态成员函数也可以操作静态数据成员

2、( )只能访问静态成员变量,不能访问非静态成员变量。
    A、静态函数
    B、虚函数
    C、构造函数
    D、析构函数

3、对静态成员的错误描述是( )。
    A、静态成员不属于对象,是类的共享成员
    B、静态数据成员要在类外定义和初始化
    C、调用静态成员函数时要通过类或对象激活,所以静态成员函数拥有this指针
    D、静态成员函数可以操作非静态数据成员

4、类的静态成员函数中不能访问非静态成员。

2-15_this指针随堂测验

1、关于this指针的说法错误的是( )。
    A、this指针必须显示说明
    B、当创建一个对象后,this指针就指向该对象
    C、成员函数拥有this指针
    D、静态成员函数不拥有this指针

2、this指针是C++实现( )的一种机制。
    A、抽象
    B、封装
    C、继承
    D、重载

3、已知Circle类对象c,Circle类中有一个setCenter成员函数,如果c.setCenter(...)返回值仍然是c,则setCenter函数中的return语句应写作return this;。

2-16_类的友元随堂测验

1、下面选项中,不是类的成员函数为( )。
    A、构造函数
    B、析构函数
    C、友元函数
    D、缺省参数的构造函数

2、下面对友元的错误描述是( )。
    A、关键字friend用于声明友元
    B、一个类的成员函数可以是另一个类的友元
    C、友元函数访问对象的成员不受访问特性影响
    D、友元函数通过this指针访问对象成员

3、某类中的友元类的所有成员函数可以存取或修改该类中的私有成员。

2-17_类的对象成员 – 基本概念随堂测验

1、下面对对象成员的正确描述是( )。
    A、在一个类中可以声明本类的对象成员
    B、对象成员的声明方法与普通数据成员的声明方法相同
    C、在一个类中可以声明本类的指针数据成员
    D、如果对象成员的构造函数有参数,则必须在声明该对象成员的同时给其构造函数传递参数值

2-18_类的对象成员 – 对象成员的声明、初始化和访问随堂测验

1、下列关于对象数组的描述中,错误的是( )。
    A、对象数组的下标是从0开始的
    B、对象数组的数组名是一个常量指针
    C、对象数组的每个元素是同一个类的对象
    D、对象数组只能赋初值,而不能在定义后赋值

2、下面对对象成员的正确描述是( )。
    A、可以在构造函数的初始化列表中给出对象成员的初始化
    B、可以在构造函数的函数体中给出对象成员的初始化
    C、如果一个对象成员有无参构造函数,则可以省略对象成员的初始化语句
    D、若A类中有B类对象成员,则在创建A类对象时,先执行B类的构造函数,再执行A类的构造函数

3、类的成员函数中可以直接访问对象成员中的私有成员。

2-19_自定义类的运算符重载概述随堂测验

1、下列关于运算符重载的描述中,()是正确的。
    A、运算符重载可以改变操作数的个数
    B、运算符重载可以改变优先级
    C、运算符重载可以改变结合性
    D、运算符重载不可以改变语法结构

2、下列运算符中,()运算符在C++中不能重载。
    A、?:
    B、+
    C、-
    D、=

3、下面关于自定义类的运算符重载的说法中,正确的是( )。
    A、C++中的所有运算符都可以重载
    B、不仅可以重载C++中已有的运算符,还可以创建新的运算符
    C、运算符重载实质上就是函数重载
    D、运算符重载的函数名是operator<重载的运算符>

4、多数运算符可以重载,个别运算符不能,运算符重载是通过函数定义实现的。

2-20_类成员函数形式的运算符重载随堂测验

1、运算符重载是一种特殊的函数重载,其函数名为operator<重载运算符>。

2-21_类友元形式的运算符重载随堂测验

1、友元运算符obj1>obj2被C++编译器解释为()。
    A、operator>(obj1,obj2)
    B、>(obj1,obj2)
    C、jobj2.operator>(obj1)
    D、obj1.operator(obj2)

2、下面关于自定义类的运算符重载的说法中,正确的是( )。
    A、类友元形式重载的运算符,重载函数中的this指针指向第一个运算数
    B、类友元形式重载的运算符,重载函数中可以直接访问类中的私有成员
    C、类友元形式重载的运算符,重载函数的参数个数与运算符的实际操作数个数相同
    D、所有运算符都可以以类友元形式进行重载

3、类非成员函数形式的运算符重载函数通常采用友元函数,是为了在运算符重载中方便访问类中的非公有成员。

2-22_赋值运算符和下标运算符重载程序实例随堂测验

1、下面关于自定义类的运算符重载的说法中,正确的是( )。
    A、赋值运算符和下标运算符只能重载为类的成员函数
    B、赋值运算符和下标运算符只能重载为类的友元函数
    C、赋值运算符重载时一般以引用方式返回*this,表示返回赋值运算符的左操作数
    D、使用重载的赋值运算符时,左操作数一定是自定义类型

2、运算符[]只能用成员运算符来重载,不能用友元运算符来重载。

第二章单元测试

1、有关类和对象的说法不正确的是( )。
    A、对象是类的一个实例
    B、一个类只能有一个对象
    C、任何一个对象只能属于一个具体的类
    D、类与对象的关系和数据类型和变量的关系相似

2、下列关于C++类的描述中错误的是( )。
    A、类与类之间可以通过一些手段进行通信和联络
    B、类用于描述事物的属性和对事物的操作
    C、类与类之间必须是平等的关系,而不能组成层次关系
    D、类与类之间可以通过封装而具有明确的独立性

3、空类的声明( )是正确的。
    A、class类名;
    B、class类名{};
    C、class类名{}
    D、class类名

4、假定X为一个类,执行X a[3],*p[2];语句时会自动调用该类的构造函数( )次。
    A、2
    B、3
    C、4
    D、5

5、对于下面定义的类A在函数f()中将对象成员n的值修改为60的语句应该是( ) class A { public: A(int x){n=x;} void SetNum(int n1){n=n1;} private: int n; } int f() { A*ptr=new A(6); }
    A、A(60)
    B、SetNum(60)
    C、ptr->SetNum(60)
    D、ptr->n=60

6、在下列关键字中,用以说明类中公有成员的是( )。
    A、public
    B、private
    C、protected
    D、friend

7、对于任意一个类,析构函数的个数最多为( )。
    A、0
    B、1
    C、2
    D、3

8、缺省析构函数的函数体是( )。
    A、不存在
    B、随机产生的
    C、空的
    D、无法确定的

9、假定MyClass为一个类,则该类的拷贝构造函数的声明语句为( )。
    A、MyClass(MyClass x)
    B、MyClass&(MyClass x)
    C、MyClass(MyClass &x)
    D、MyClass(MyClass *x)

10、静态成员遵循类的其他成员所遵循的访问限制,除了( )。
    A、静态成员函数
    B、静态数据成员初始化
    C、私有静态数据成员
    D、公有静态成员函数

11、( )只能访问静态成员变量,不能访问非静态成员变量。
    A、静态函数
    B、虚函数
    C、构造函数
    D、析构函数

12、this指针是C++实现( )的一种机制。
    A、抽象
    B、封装
    C、继承
    D、重载

13、友元访问类对象的成员时使用( )。
    A、类的成员名
    B、“this->成员名”的形式
    C、“类名::成员名”的形式
    D、“对象名.成员名”的形式

14、下列运算符中,()运算符在C++中不能重载。
    A、?:
    B、+
    C、-
    D、=

15、友元运算符obj1>obj2被C++编译器解释为()。
    A、operator>(obj1,obj2)
    B、>(obj1,obj2)
    C、jobj2.operator>(obj1)
    D、obj1.operator(obj2)

16、下列( )不是构造函数的特征。
    A、构造函数在创建对象时自动调用
    B、构造函数可以重载
    C、构造函数不可以设置默认参数
    D、构造函数必须指定函数类型

17、类的成员函数中可以直接访问本类的( )。
    A、公有成员
    B、保护成员
    C、私有成员函数
    D、私有成员变量

18、系统提供的默认拷贝构造函数实现的是“浅拷贝”,下列关于浅拷贝的说法中正确的是( )。
    A、当一个类中有指针成员变量时,浅拷贝有可能会导致一片内存被重复释放
    B、当一个类中有指针成员变量时,浅拷贝有可能导致一个对象中保存的数据不正确
    C、如果一个类中只有int型和double型的成员变量,则浅拷贝不会出现任何问题
    D、如果一个类中有一个成员变量是char型数组,则使用浅拷贝会存在问题

19、下面对友元的正确描述是( )。
    A、关键字friend用于声明友元
    B、一个类的成员函数可以是另一个类的友元
    C、友元函数访问对象的成员不受访问特性影响
    D、友元函数通过this指针访问对象成员

20、函数的定义不可以嵌套,类的定义可以嵌套。

21、当建立一个新对象时,程序不会自动调用任何函数。

22、使用指向对象的指针来访问类的成员,则必须使用的运算符是->。

23、在类内部定义的public数据可以在类外进行存取。

24、为了在对象生存期结束时释放其指针成员所指向的动态存储空间,通常需要为该类定义构造函数。

25、在类体外定义成员函数时需要通过域运算符指定该成员函数所属的类。

26、类的静态成员变量只能在静态成员函数中使用。

27、运算符[]只能用成员运算符来重载,不能用友元运算符来重载。

第三章继承与多态

3-01_继承概述随堂测验

1、在C++中,类与类之间的继承关系具有( )。
    A、自反性
    B、对称性
    C、传递性
    D、反对称性

2、对基类和派生类的描述中错误的是( )。
    A、派生类是基类的具体化
    B、基类继承了派生类的属性
    C、派生类是基类定义的延续
    D、派生类是基类的特殊化

3、在C++中,能被派生类继承的函数是( )。
    A、成员函数
    B、构造函数
    C、析构函数
    D、拷贝构造函数

4、下列关于类的继承描述中,( )是正确的。
    A、派生类可以访问基类的所有数据成员,也能调用基类的所有成员函数
    B、派生类也是基类,但基类不一定具有派生类的全部属性和方法
    C、继承描述类的层次关系,派生类可以具有与基类相同的属性和方法
    D、一个基类可以有多个派生类,一个派生类可以有多个基类

5、C++语言中,既允许单继承,又允许多继承。

3-02_派生类定义随堂测验

1、在派生类中可以直接访问基类的()。
    A、公有成员
    B、保护成员
    C、私有成员
    D、友元成员

2、派生类中至少包含了它的所有基类的成员(除构造函数和析构函数外),在这些成员中可能有的是不可访问。

3-03_派生类构造函数和析构函数随堂测验

1、在创建派生类对象时,构造函数的执行顺序是( )。
    A、对象成员构造函数、基类构造函数、派生类本身的构造函数
    B、派生类本身的构造函数、基类构造函数、对象成员构造函数
    C、基类构造函数、派生类本身的构造函数、对象成员构造函数
    D、基类构造函数、对象成员构造函数、派生类本身的构造函数

2、派生类的构造函数的成员初始化列表中,不能包含()。
    A、基类的构造函数
    B、派生类中子对象的初始化
    C、基类的子对象初始化
    D、派生类中一般数据成员的初始化

3、下列描述中,正确的是( )。
    A、创建派生类对象时会先调用基类构造函数,再调用派生类构造函数
    B、创建派生类对象时会先调用派生类构造函数,再调用基类构造函数
    C、如果基类构造函数有参数,则必须在派生类构造函数的初始化列表中写上基类构造函数的调用语句
    D、如果派生类构造函数的初始化列表中没写基类构造函数的调用,则表示调用基类的无参构造函数

4、构造函数可以被继承。

3-05_函数重定义和派生类的继承方式随堂测验

1、下列关于类的继承描述中,( )是错误的。
    A、派生类可以访问基类的所有数据成员,也能调用基类的所有成员函数
    B、派生类也是基类,但基类不一定具有派生类的全部属性和方法
    C、继承描述类的层次关系,派生类可以具有与基类相同的属性和方法
    D、一个基类可以有多个派生类,一个派生类可以有多个基类

2、当一个派生类公有继承一个基类时,基类中的所有公有成员成为派生类的( )。
    A、public成员
    B、private成员
    C、protected成员
    D、友元

3、下面程序段中,说法正确的是( ) class location{ public : int GetX(); }; class rectangle:private location { public: int GetW(); };
    A、类rectangle的私有派生类是location
    B、类rectangle中的public成员在类 location中是私有的
    C、类location中的public成员在类 rectangle中是不可访问的
    D、viod f( ) { Rectangle r; int X=r .GetX( ); } 其中int X = r .GetX( );是非法语句

4、当用public继承从基类派生一个类时,基类的()成员可被派生类中的成员函数访问。
    A、protected
    B、public
    C、private
    D、friend

5、派生类对基类继承的成员函数进行重定义后,则通过派生类对象和基类对象调用的都是重定义后的成员函数。

3-06_多重继承下的派生类定义随堂测验

1、对于多重继承,有( )。
    A、一个派生类只能有一个基类
    B、一个基类只能产生一个派生类
    C、一个基类必须产生多个派生类
    D、一个派生类可有多个基类

2、在多继承中,公有派生和私有派生对于基类成员在派生类中的可访问性与单继承的规则()。
    A、完全相同
    B、完全不同
    C、部分相同,部分不同
    D、以上都不对

3、下面描述中,正确的是( )。
    A、多重继承中,派生类对象被销毁时析构函数的调用顺序与派生类对象创建时构造函数的调用顺序相反
    B、多重继承中,派生类对象被销毁时析构函数的调用顺序与派生类对象创建时构造函数的调用顺序一致
    C、多重继承中创建派生类对象时各基类构造函数的调用顺序与基类构造函数在初始化列表中的出现顺序一致
    D、多重继承中,如果派生类的初始化列表中没有某个基类构造函数的调用语句,则表示调用该基类的无参构造函数

4、多继承情况下,派生类的构造函数中基类构造函数的执行顺序取决于定义派生类时所指定的各基类的顺序。

3-07_多重继承中的二义性问题随堂测验

1、关于多继承二义性的描述中,错误的是()。
    A、一个派生类的基类中都有某个同名成员,在派生类中对这个成员的访问可能出现二义性
    B、解决二义性的最常用的方法是对成员名的限定法
    C、基类和派生类同时出现的同名函数,也存在二义性问题
    D、一个派生类是从两个基类派生出来的,而这两个基类又有一个共同的基类, 对该基类成员进行访问时,可能出现二义性

2、多重继承中的二义性问题是由于一个派生类从不同基类中继承了同名成员变量或相同函数原型的成员函数。

3-08_虚拟继承和虚基类随堂测验

1、下列虚基类的声明中正确的是( )。
    A、class virtual B:public A
    B、virtual class B:public
    C、class B:public A virtual
    D、class B: virtual public A

2、设置虚基类的目的是()。
    A、简化程序
    B、消除二义性
    C、提高运行效率
    D、减少目标代码

3、下面描述中,正确的是( )。
    A、虚拟继承可以解决多重继承中的二义性问题
    B、类层次中的类从虚基类中直接继承虚基类的成员
    C、在有虚基类的类层次中,创建派生类对象时,会先调用基类的构造函数再调用虚基类的构造函数
    D、在有虚基类的类层次中,销毁派生类对象时析构函数的调用顺序与创建派生类对象时构造函数的调用顺序相反

4、虚基类是用来解决多继承中公共基类在派生类中产生多份基类成员的问题。

3-09_类型兼容随堂测验

1、在公有派生情况下,有关派生类对象和基类对象的关系,不正确的叙述是()。
    A、派生类的对象可以赋给基类对象
    B、派生类的对象可以初始化基类的引用
    C、派生类的对象可以直接访问基类的成员
    D、派生类的对象的地址可以赋给指向基类的指针

2、下面( )的叙述不符合赋值兼容规则。
    A、派生类的对象可以赋值给基类的对象
    B、基类的对象可以赋值给派生类的对象
    C、派生类的对象可以初始化基类的对象
    D、派生类的对象的地址可以赋值给指向基类的指针

3、下列选项中,属于类型兼容特点的选项包括( )。
    A、可以用派生类对象给基类对象赋值
    B、可以用派生类对象地址给基类指针赋值
    C、可以用基类对象给派生类对象赋值
    D、可以用基类对象初始化派生类引用

3-10_多态性的概念随堂测验

1、继承性是指同样的消息被不同对象接收时可产生不同的行为。

3-11_虚函数随堂测验

1、动态联编所支持的多态性是( )。
    A、虚函数
    B、继承
    C、编译时的多态性
    D、运行时的多态性

2、C++有( )种联编方式。
    A、1
    B、2
    C、3
    D、4

3、多态调用是指( )。
    A、以任何方式调用一个虚函数
    B、以任何方式调用一个纯虚函数
    C、借助于指向对象的基类指针或引用调用一个虚函数
    D、借助于指向对象的基类指针或引用调用一个纯虚函数

4、下列描述正确的是( )。
    A、多态性是通过动态绑定实现的
    B、多态性是通过静态绑定实现的
    C、动态绑定是在程序执行时进行绑定
    D、静态绑定是在程序执行时进行绑定

5、通过指针或引用可以调用不同对象相同名称的函数,但可导致完全不同的行为的现象称为二义性。

3-12_虚析构函数随堂测验

1、若析构函数是虚函数,则delete对析构函数的调用采用( )。
    A、静态联编
    B、动态联编
    C、重载函数
    D、多重函数

2、下列描述正确的是( )。
    A、使用基类指针释放其所指向的派生类对象时,必须将析构函数声明为虚函数
    B、为了减少错误,在定义类时最好将每个类的析构函数都声明为虚函数
    C、当类里包含一个虚函数时,应把析构函数也声明为虚函数
    D、类中包含虚函数会增加对象的尺寸

3、构造函数和析构函数均不能被说明为虚函数。

3-13_纯虚函数和抽象类随堂测验

1、下面函数原型声明中,( )声明了fun为纯虚函数。
    A、void fun()=0;
    B、virtual void fun()=0;
    C、virtual void fun();
    D、virtual void fun(){};

2、若一个类中含有纯虚函数,则该类称为( )。
    A、基类
    B、纯基类
    C、派生类
    D、抽象类

3、关于抽象类, 下列表述正确的是( )。
    A、抽象类的成员函数中至少有一个没有实现的函数(即无函数体定义的函数)
    B、派生类必须实现作为基类的抽象类中的纯虚函数
    C、派生类不可能成为抽象类
    D、抽象类不能用于定义对象

4、假设A为抽象类,下列语句( )是正确的。
    A、A fun(int);
    B、A *p;
    C、int fun(A&);
    D、A Obj;

5、构造函数说明为纯虚函数是没有意义的。

第三章 单元测试

1、在C++中,能被派生类继承的函数是( )。
    A、成员函数
    B、构造函数
    C、析构函数
    D、拷贝构造函数

2、基类和派生类可以分别叫做( )。
    A、“大类”和“小类”
    B、“父类”和“子类”
    C、“小类”和“大类”
    D、“子类”和“父类”

3、派生类的构造函数的成员初始化列表中,不能包含()。
    A、基类的构造函数
    B、派生类中子对象的初始化
    C、基类的子对象初始化
    D、派生类中一般数据成员的初始化

4、派生类的对象对它的基类成员中()是可以访问的。
    A、公有继承的公有成员
    B、公有继承的私有成员
    C、公有继承的保护成员
    D、私有继承的公有成员

5、下列说法中错误的是( )。
    A、公有继承时基类中的public成员在派生类中是public的
    B、公有继承时基类中的private成员在派生类中是不可访问的
    C、私有继承时基类中的public成员在派生类中是private的
    D、私有继承时基类中的public成员在派生类中是protected的

6、在多继承中,公有派生和私有派生对于基类成员在派生类中的可访问性与单继承的规则()。
    A、完全相同
    B、完全不同
    C、部分相同,部分不同
    D、以上都不对

7、设置虚基类的目的是()。
    A、简化程序
    B、消除二义性
    C、提高运行效率
    D、减少目标代码

8、下面( )的叙述不符合赋值兼容规则。
    A、派生类的对象可以赋值给基类的对象
    B、基类的对象可以赋值给派生类的对象
    C、派生类的对象可以初始化基类的对象
    D、派生类的对象的地址可以赋值给指向基类的指针

9、关于函数的描述中,()是正确的。
    A、派生类的虚函数与基类的虚函数具有不同的参数个数和类型
    B、基类中说明了虚函数后,派生类中其对应的函数一定要说明为虚函数
    C、虚函数是一个成员函数
    D、虚函数是一个static类型的成员函数

10、若析构函数是虚函数,则delete对析构函数的调用采用( )。
    A、静态联编
    B、动态联编
    C、重载函数
    D、多重函数

11、()是一个在基类中说明虚函数,它在该基类中没有定义,但要求任何派生类中的可访问性的规定是相同的。
    A、纯虚函数
    B、虚析构函数
    C、虚构造函数
    D、静态成员函数

12、下列描述中,()是抽象类的特性。
    A、可以说明虚函数
    B、可以定义友元函数
    C、可以进行构造函数重载
    D、不能说明其对象

13、下面哪个基类中的成员函数表示纯虚函数( )。
    A、virtual void vf(int)
    B、void vf(int)=0
    C、virtual void vf()=0
    D、virtual void vf(int)

14、多态调用是指( )。
    A、以任何方式调用一个虚函数
    B、以任何方式调用一个纯虚函数
    C、借助于指向对象的基类指针或引用调用一个虚函数
    D、借助于指向对象的基类指针或引用调用一个纯虚函数

15、在C++中,要实现动态联编,可以使用( )调用虚函数。
    A、类名
    B、派生类指针
    C、对象名
    D、基类指针

16、在C++中,不能被派生类继承的函数是( )。
    A、成员函数
    B、构造函数
    C、析构函数
    D、拷贝构造函数

17、基类中的公有成员可能是派生类的( )。
    A、public成员
    B、private成员
    C、protected成员
    D、友元成员

18、下面描述中,正确的是( )。
    A、多重继承中,派生类对象被销毁时析构函数的调用顺序与派生类对象创建时构造函数的调用顺序相反
    B、多重继承中,派生类对象被销毁时析构函数的调用顺序与派生类对象创建时构造函数的调用顺序一致
    C、多重继承中创建派生类对象时各基类构造函数的调用顺序与基类构造函数在初始化列表中的出现顺序一致
    D、多重继承中,如果派生类的初始化列表中没有某个基类构造函数的调用语句,则表示调用该基类的无参构造函数

19、下面描述中,错误的是( )。
    A、虚函数是没有实现的函数
    B、纯虚函数是没有实现的函数
    C、抽象类可以用于创建对象
    D、抽象类指针可以指向不同的派生类

20、在公有继承中,基类中只有公有成员对派生类对象是可见的。

21、在保护派生中,基类权限为private的成员在派生类中权限也为private。

22、多重继承中的二义性问题是由于一个派生类从不同基类中继承了同名成员变量或相同函数原型的成员函数。

23、继承性是指同样的消息被不同对象接收时可产生不同的行为。

24、定义虚函数所用的关键字是virtual。

25、定义纯虚函数所用的关键字是purevirtual。

第四章输入输出流

4-01_输入输出流概述随堂测验

1、下列类中( )是输入/输出流类iostream的派生类。
    A、fstream
    B、ofstream
    C、ifstream
    D、ostream

2、进行文件操作时需要包含()头文件。
    A、iostream
    B、fstream
    C、stdio
    D、stdlib

3、下面描述中,正确的是( )。
    A、可以定义ios类的对象
    B、istream对象用来实现输入操作
    C、ios是fstream的直接基类
    D、istream是ifstream的直接基类

4、C++的I/O系统通过流的机制实现文件和控制台的输入输出操作。

4-02_输入输出流对象随堂测验

1、在下列选项中( )不是ostream类的对象。
    A、cin
    B、cerr
    C、clog
    D、cout

2、要求打开文件 d:\file.dat,可写入数据,正确的语句是( )。
    A、ifstream infile("d:\file.dat", ios::in);
    B、ifstream infile("d:\\file.dat", ios::in);
    C、ofstream infile("d:\file.dat", ios::out);
    D、fstream infile("d:\\file.dat", ios::in| ios::out);

3、下列输入输出流类对象中,带缓冲区支持的包括( )。
    A、cin
    B、cerr
    C、clog
    D、cout

4、cout属于标准输出流,而cerr和clog则不属于标准输出流。

4-03_输入输出流的插入和提取运算符随堂测验

1、若定义cin>>str;当输入 Microsoft Visual Studio 6.0! 所得的结果是str=()。
    A、Microsoft Visual Studio 6.0!
    B、Microsoft
    C、Microsoft Visual
    D、Microsoft Visual Studio 6.0

2、用于输入输出的运算符包括( )。
    A、<<
    B、++
    C、->
    D、>>

3、预定义的提取符和插入符是可以重载的。

4-07_输入输出流的getline函数随堂测验

1、getline()函数从流中提取终止字符,但终止字符被丢弃。

4-08_输入输出流的write函数随堂测验

1、假定已定义浮点型变量data,以二进制方式把data的值写入输出文件流对象outfile中去,正确的语句是( )。
    A、outfile.write((float *) &data, sizeof(float));
    B、outfile.write((float *) &data, data);
    C、outfile.write((char *) &data, sizeof(float));
    D、outfile.write((char *) &data, data);

4-09_输入输出流的read函数随堂测验

1、read函数的功能是从输入流中读取( )。
    A、一个字符
    B、当前字符
    C、一行字符
    D、指定若干个字符

4-10_输入输出流的write、read函数程序实例随堂测验

1、已知f是以二进制读写方式打开的文件流对象,且有int型变量a,则下列选项中能正确进行文件读写操作的语句包括( )。
    A、f.write((char*)a, sizeof(a));
    B、f.write((char*)&a, sizeof(a));
    C、f.read((char*)a, sizeof(a));
    D、f.read((char*)&a, sizeof(a));

4-11_文件随机读写概述和相关函数随堂测验

1、已知in是ifstream对象,则下列语句正确的是( )。
    A、in.seekg(5);
    B、in.seekg(5, ios::beg);
    C、in.seekg(5, ios::end);
    D、in.seekg(-5);

4-13_自定义类型数据的标准输入输出和文本文件输入输出随堂测验

1、下列插入和提取运算符重载的函数原型中,正确的是( )。
    A、istream& operator>>(istream&, 自定义类型&)
    B、istream& operator<<(istream&, 自定义类型&)
    C、ostream& operator>>(ostream&, 自定义类型&)
    D、ostream& operator<<(ostream&, 自定义类型&)

第四章单元测试

1、进行文件操作时需要包含_()头文件。
    A、iostream
    B、fstream
    C、stdio
    D、stdlib

2、当使用ifstream流类定义一个流对象并打开一个磁盘文件时,文件的隐含打开方式为( )。
    A、ios::in
    B、ios::out
    C、ios::trunk
    D、ios::binary

3、在C++中,打开一个文件就是将这个文件与一个()建立关联;关闭一个文件就是取消这种关联。
    A、流
    B、类
    C、结构
    D、对象

4、若定义cin>>str;当输入 Microsoft Visual Studio 6.0! 所得的结果是str= ()。
    A、Microsoft Visual Studio 6.0!
    B、Microsoft
    C、Microsoft Visual
    D、Microsoft Visual Studio 6.0

5、假定已定义浮点型变量data,以二进制方式把data的值写入输出文件流对象outfile中去,正确的语句是( )。
    A、outfile.write((float *) &data, sizeof(float));
    B、outfile.write((float *) &data, data);
    C、outfile.write((char *) &data, sizeof(float));
    D、outfile.write((char *) &data, data);

6、read函数的功能是从输入流中读取( )。
    A、一个字符
    B、当前字符
    C、一行字符
    D、指定若干个字符

7、下列打开文件的语句中,能创建文件的选项包括( )。
    A、ofstream f("file.txt", ios::out);
    B、ofstream f("file.txt");
    C、fstream f("file.txt", ios::out);
    D、ifstream f("file.txt",ios::out);

8、用于输入输出的运算符包括( )。
    A、<<
    B、++
    C、->
    D、>>

9、已知f是以二进制读写方式打开的文件流对象,且有int型变量a,则下列选项中能正确进行文件读写操作的语句包括( )。
    A、f.write((char*)a, sizeof(a));
    B、f.write((char*)&a, sizeof(a));
    C、f.read((char*)a, sizeof(a));
    D、f.read((char*)&a, sizeof(a));

10、下列插入和提取运算符重载的函数原型中,正确的是( )。
    A、istream& operator>>(istream&, 自定义类型&)
    B、istream& operator<<(istream&, 自定义类型&)
    C、ostream& operator>>(ostream&, 自定义类型&)
    D、ostream& operator<<(ostream&, 自定义类型&)

11、C++中ostream类的直接基类是ios。

12、使用打开文件函数open()之前,需要定义一个流类对象,使用open()函数来操作该对象。

13、设要把一个文件输出流对象myFile与文件“f:\myText.txt”相关联,所用的C++语句是ifstream myFile("f:\\myText.txt",ios::in|ios::out);

14、预定义的提取符和插入符是可以重载的。

15、getline()函数从流中提取终止字符,但终止字符被丢弃。