【期末不挂科-C++考前速过系列P3】大二C++第3次过程考核(20道选择题&12道判断题&2道代码题)【解析,注释】

发布时间:2024年01月13日

前言

大家好吖,欢迎来到 YY 滴C++考前速过系列 ,热烈欢迎! 本章主要内容面向接触过C++的老铁
主要内容含:
在这里插入图片描述

欢迎订阅 YY滴C++专栏!更多干货持续更新!以下是传送门!

  • 更加详细和全面的C++知识讲解——>可关注 YY的《C++》专栏
  • 此系列主打期末复习速过,一些基本知识点会略过(例如虚函数具体原理等等)

一.选择题(20)

  1. 类模板的模板参数( )。D
    A.只可作为数据成员的类型
    B.只可作为成员的返回值类型
    C.只可作为成员函数的参数类型
    D.以上三者皆可
  1. 如果有如下函数模板的定义:C
    A.func (3, 5) ;
    B.func<>(3,5)
    C.func(3, 2.5)
    D.func<int>(3 2.5):
  1. 如果try中不抛出异常,那么try块执行完后控制权会转向何处? A
    A.catch后的第一条语句
    B.catch语句块的第一条语句
    C.throw语句
    D.退出程序
  1. 模板的使用是为了( )。A
    A.提高代码的可至用性
    B.提高代码的运行效率
    C.加强类的封装性
    D.实现多态性
  1. C++处理异常的机制是由( )3部分组成。C
    A.编辑、编译和运行
    B.编辑、编译和捕获
    C.检查、抛出和捕获
    D.检查、抛出和运行

6.下面的那一条不是面向对象的重要特性?D
A.抽象和封装
B.多态
C.继承
D.对象

解析:

  • 面向对象的重要特性分别为:抽象、封装、继承、多态。
  1. 重载函数在调用时选择的依据,()是错误的B
    A.参数的类型
    B.参数的返回值类型
    C.参数的个数
  1. 【类和对象定义细节】类的成员访问限定符不包含( )。D
    A.private:限定成员称为私有成员:私有成员的数据或区数使用受到类的限制,本类的成员函数可以访问,但类外不能访问
    B.public:限定成员称为公有成员:公有成员的数据或函数不受类的限制,可以在类内或类外自由使用,本类的成员函数可以访问,类外也能访问
    C.proteted:限定成员为保护成员,只允许在类内及该类的派生类中使用保护的数据或函数,即保护成员的作用域是该类及该类的派生类
    D.const: 限定类的成员为常类型,不允许修改数据的值
  1. 【类和对象定义细节】以下有关类与结构体的叙述不正确的是( )C
    A.结构体中只包含数据:类中封装了数据和操作
    B.结构体的成员对外界通常是开放的;类的成员可以被隐藏
    C.用struct不能声明一个类型名;而class可以声明一个类名
    D.结构体成员默认为public;类成员默认为private
  1. 以下不属于构造函数特征的是( )。D
    A.构造函数名与类名相同
    B.构造函数可以重载
    C.构造函数可以设置默认参数
    D.构造函数必须指定函数类型
  1. 下列关于构造函数的说法错误的是( )。B
    A.构造函数的名字必须与类的名字相同
    B.构造函数可以定义为void类型
    C.构造函数可以重载、可以带有默认参数
    D.构造函数可以由用户自定义也可以由系统自动生成
  1. ( )的功能是对象进行初始化。C
    A.析构函数
    B.数据成员
    C.构造函数
    D.静态成员函数
  1. 类的析构函数的作用是()。D
    A.一般成员函数
    B.类的初始化
    C.对象初始化
    D.删除对象
  1. 继承具有( ),即当基类本身也是某一类的派生类时,底层的派生类也会自动继承间接基类的成员。B
    A.规律性
    B.传递性
    C.重复性
    D.多样性
  1. 基类中的( )不允许外界访问,但允许派生类的成员函数访问,这样既有一定的隐藏能力,又提供了开放的接口。D
    A.公有成员
    B.私有成员
    C.私有成员函数
    D.保护成员
  1. 动态多态的调用是指( )。C
    A.以任何方式调用一个虚函数
    B.以任何方式调用一个纯虚函数
    C.借助于指向对象的基类指针或引用调用一个虚函数
  1. 虚函数必须是类的( )。D
    A.友元函数
    B.构造函数
    C.析构函数
    D.成员函数
  1. 下列各函数的说明中,( )表示纯虚函数。C
    A.virtual int vf(int);
    B.void vf(int)=0.8;
    C.virtual void vf0=0;
    D.virtual void vf(int);
  1. 下列关于纯虚函数与抽象类的描述中,( )是错误的。C
    A.抽象类是指具有纯虚函数的类
    B.纯虚函数是一个特殊的虚函数,它没有具体的实现
    C.一个基类中具有纯虚函数,该基类的派生类一定不再是抽象类
    D.抽象类只能作为基类来用,其纯虚函数的实现由派生类给出
  1. 下列描述中,( )是抽象类的特征。D
    A.可以说明虚函数
    B.可以进行构造函数重载
    C.可以定义友元
    D.不能定义其对象

二.判断题(12)

  • PS:解析与答案在下面
  1. 函数模板又称为泛型函数、通用函数。
  2. 当程序中同时重载有函数模板和非函数模板时,编译器会优先选用模板函数。
  3. 可以从类模板派生出类模板,但不可以从类模板派生出非类模板。
  4. 函数模板可以重载。
  5. 类模板可以作为函数模板的返回类型。
  6. 一个try块可与多个catch语句(称为异常处理器)联系,每个catch语句处理一种类型的异常信息。
  7. 若没有catch语句与抛出异常的类型相匹配,则程序继续运行。
  8. 抛出异常的程序模块一旦抛出了异常,在处理完异常后,继续执行throw后面的语句。
  9. throw语句的一般形式为 throw 表达式; 也可以不带表达式 throw;
  10. 一个try块可与多个catch语句(称为异常处理器)联系,找到一个类型匹配的catch语句后,继续匹配后面的catch语句,可能执行多个catch语句。
  11. 构造函数和析构函数的执行顺序为先构造的后析构,后构造的先析构
  12. 析构函数是特殊的成员函数,它的作用与构造函数相反,完成程序结束前的清理工作。
  1. ×
  2. ×
  3. ×
  4. ×
  5. ×

三.代码题(2)

例题1:

  • 编写一个函数模板,使用冒泡排序将数组内容由小到大排列并打印出来,并写出调用此函数模板的完整程序,使得函数调用时,数组的类型可以是整型,也可以是双精度型。
#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()中显示相应的出错信息。
#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;
}
文章来源:https://blog.csdn.net/YYDsis/article/details/135555043
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。