前言
大家好吖,欢迎来到 YY 滴C++考前速过系列 ,热烈欢迎! 本章主要内容面向接触过C++的老铁
主要内容含:
欢迎订阅 YY滴C++专栏!更多干货持续更新!以下是传送门!
- YY的《C++》专栏
- YY的《C++11》专栏
- YY的《Linux》专栏
- YY的《数据结构》专栏
- YY的《C语言基础》专栏
- YY的《初学者易错点》专栏
- YY的《小小知识点》专栏
- YY的《单片机期末速过》专栏
- YY的《C++期末速过》专栏
- 更加详细和全面的C++知识讲解------>可关注 YY的《C++》专栏
- 此系列主打期末复习速过,一些基本知识点会略过(例如虚函数具体原理等等)
目录
一.选择题(20)
- 类模板的模板参数( )。D
A.只可作为数据成员的类型
B.只可作为成员的返回值类型
C.只可作为成员函数的参数类型
D.以上三者皆可- 如果有如下函数模板的定义:C
A.func (3, 5) ;
B.func<>(3,5)
C.func(3, 2.5)
D.func<int>
(3 2.5):- 如果try中不抛出异常,那么try块执行完后控制权会转向何处? A
A.catch后的第一条语句
B.catch语句块的第一条语句
C.throw语句
D.退出程序- 模板的使用是为了( )。A
A.提高代码的可至用性
B.提高代码的运行效率
C.加强类的封装性
D.实现多态性- C++处理异常的机制是由( )3部分组成。C
A.编辑、编译和运行
B.编辑、编译和捕获
C.检查、抛出和捕获
D.检查、抛出和运行
6.下面的那一条不是面向对象的重要特性?DA.抽象和封装
B.多态
C.继承
D.对象
解析:
- 面向对象的重要特性分别为:抽象、封装、继承、多态。
- 重载函数在调用时选择的依据,()是错误的B
A.参数的类型
B.参数的返回值类型
C.参数的个数- 【类和对象定义细节】类的成员访问限定符不包含( )。D
A.private:限定成员称为私有成员:私有成员的数据或区数使用受到类的限制,本类的成员函数可以访问,但类外不能访问
B.public:限定成员称为公有成员:公有成员的数据或函数不受类的限制,可以在类内或类外自由使用,本类的成员函数可以访问,类外也能访问
C.proteted:限定成员为保护成员,只允许在类内及该类的派生类中使用保护的数据或函数,即保护成员的作用域是该类及该类的派生类
D.const: 限定类的成员为常类型,不允许修改数据的值- 【类和对象定义细节】以下有关类与结构体的叙述不正确的是( )C
A.结构体中只包含数据:类中封装了数据和操作
B.结构体的成员对外界通常是开放的;类的成员可以被隐藏
C.用struct不能声明一个类型名;而class可以声明一个类名
D.结构体成员默认为public;类成员默认为private- 以下不属于构造函数特征的是( )。D
A.构造函数名与类名相同
B.构造函数可以重载
C.构造函数可以设置默认参数
D.构造函数必须指定函数类型- 下列关于构造函数的说法错误的是( )。B
A.构造函数的名字必须与类的名字相同
B.构造函数可以定义为void类型
C.构造函数可以重载、可以带有默认参数
D.构造函数可以由用户自定义也可以由系统自动生成- ( )的功能是对象进行初始化。C
A.析构函数
B.数据成员
C.构造函数
D.静态成员函数- 类的析构函数的作用是()。D
A.一般成员函数
B.类的初始化
C.对象初始化
D.删除对象- 继承具有( ),即当基类本身也是某一类的派生类时,底层的派生类也会自动继承间接基类的成员。B
A.规律性
B.传递性
C.重复性
D.多样性- 基类中的( )不允许外界访问,但允许派生类的成员函数访问,这样既有一定的隐藏能力,又提供了开放的接口。D
A.公有成员
B.私有成员
C.私有成员函数
D.保护成员- 动态多态的调用是指( )。C
A.以任何方式调用一个虚函数
B.以任何方式调用一个纯虚函数
C.借助于指向对象的基类指针或引用调用一个虚函数- 虚函数必须是类的( )。D
A.友元函数
B.构造函数
C.析构函数
D.成员函数- 下列各函数的说明中,( )表示纯虚函数。C
A.virtual int vf(int);
B.void vf(int)=0.8;
C.virtual void vf0=0;
D.virtual void vf(int);- 下列关于纯虚函数与抽象类的描述中,( )是错误的。C
A.抽象类是指具有纯虚函数的类
B.纯虚函数是一个特殊的虚函数,它没有具体的实现
C.一个基类中具有纯虚函数,该基类的派生类一定不再是抽象类
D.抽象类只能作为基类来用,其纯虚函数的实现由派生类给出- 下列描述中,( )是抽象类的特征。D
A.可以说明虚函数
B.可以进行构造函数重载
C.可以定义友元
D.不能定义其对象
二.判断题(12)
- PS:解析与答案在下面
- 函数模板又称为泛型函数、通用函数。
- 当程序中同时重载有函数模板和非函数模板时,编译器会优先选用模板函数。
- 可以从类模板派生出类模板,但不可以从类模板派生出非类模板。
- 函数模板可以重载。
- 类模板可以作为函数模板的返回类型。
- 一个try块可与多个catch语句(称为异常处理器)联系,每个catch语句处理一种类型的异常信息。
- 若没有catch语句与抛出异常的类型相匹配,则程序继续运行。
- 抛出异常的程序模块一旦抛出了异常,在处理完异常后,继续执行throw后面的语句。
- throw语句的一般形式为 throw 表达式; 也可以不带表达式 throw;
- 一个try块可与多个catch语句(称为异常处理器)联系,找到一个类型匹配的catch语句后,继续匹配后面的catch语句,可能执行多个catch语句。
- 构造函数和析构函数的执行顺序为先构造的后析构,后构造的先析构
- 析构函数是特殊的成员函数,它的作用与构造函数相反,完成程序结束前的清理工作。
- √
- ×
- ×
- √
- √
- √
- ×
- ×
- √
- ×
- √
- √
三.代码题(2)
例题1:
- 编写一个函数模板,使用冒泡排序将数组内容由小到大排列并打印出来,并写出调用此函数模板的完整程序,使得函数调用时,数组的类型可以是整型,也可以是双精度型。
cpp
#include <iostream>
template <typename T>
void bubbleSort(T arr[], int size) {
for (int i = 0; i < size - 1; i++) {
for (int j = 0; j < size - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
T temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
for (int i = 0; i < size; i++) {
std::cout << arr[i] << " ";
}
std::cout << std::endl;
}
int main() {
int intArray[] = {5, 3, 8, 2, 1, 6};
double doubleArray[] = {5.6, 3.2, 8.9, 2.1, 1.5, 6.7};
std::cout << "Sorted intArray: ";
bubbleSort(intArray, 6);
std::cout << "Sorted doubleArray: ";
bubbleSort(doubleArray, 6);
return 0;
}
例题2:
- 定义员工类Employee,具有私有数据成员name,age,salary。
在Employee类中设计一个input()成员函数,用于输入员工的name,age,salary,当age大于60小于18时,抛出一个异常。在catch()中显示相应的出错信息。
cpp
#include <iostream>
#include <string>
class Employee {
private:
std::string name;
int age;
double salary;
public:
void input() {
std::cout << "Enter name: ";
std::cin >> name;
std::cout << "Enter age: ";
std::cin >> age;
if (age > 60 || age < 18) {
throw "Invalid age";
}
std::cout << "Enter salary: ";
std::cin >> salary;
}
};
int main() {
Employee emp;
try {
emp.input();
}
catch (const char* msg) {
std::cerr << "Error: " << msg << std::endl;
}
return 0;
}