【C++面向对象——类的多态性与虚函数】编写教学游戏:认识动物(头歌实践教学平台习题)【合集】

时间:2024-12-24 10:59:43

4. 头文件说明

一、使用typeid需要包含头文件<typeinfo>

        在 C++ 编程中,当我们想要使用 typeid 运算符来获取对象或者类型的相关类型信息时,必须要包含 <typeinfo> 头文件。这个头文件中定义了 type_info 类以及和类型信息操作相关的各种声明与定义。

   type_info 类作为核心,其对象就是 typeid 运算符运算后返回的结果类型。例如,当我们写下像 typeid(someObject).name() 这样的代码去获取某个对象 someObject 的类型名称时,编译器需要知道 typeid 这个运算符如何工作以及 type_info 类中 name 函数等成员的具体实现细节,而这一切的基础就是引入了 <typeinfo> 头文件。

        如果在代码中没有包含这个头文件就使用 typeid 运算符,编译器会报错提示找不到相应的符号或者类型定义,导致编译无法顺利进行。而且,<typeinfo> 头文件不仅仅服务于简单的类型判断场景,在一些复杂的多态应用、模板编程中涉及到类型比较或者类型特征判断时,也发挥着不可或缺的作用,确保程序能够准确地知晓并处理不同对象所对应的类型情况。
 

二、strstr函数则是标准C字符串函数,需要包含头文件<cstring>

   strstr 函数是标准 C 语言中用于处理字符串的函数,在 C++ 编程里同样可以使用,不过需要包含 <cstring> 头文件。这个头文件中包含了诸多和字符串操作相关的函数声明,像字符串复制函数 strcpy、字符串拼接函数 strcat、字符串比较函数 strcmp 等等,strstr 只是其中之一。

   strstr 函数的功能是在一个给定的字符串(通常称为主字符串)中查找另一个指定的字符串(通常称为子字符串)首次出现的位置。其函数原型大致如下:

char* strstr(const char* haystack, const char* needle);
        其中, haystack 表示主字符串, needle 表示要查找的子字符串。函数返回值是一个指向主字符串中首次出现子字符串位置的指针,如果在主字符串中没有找到对应的子字符串,那么返回空指针  nullptr(在 C 语言中返回  NULL)。

        当我们在代码中需要利用 strstr 函数去判断某个字符串中是否包含特定的内容,比如前面提到的结合 typeid 获取的类型名字符串来判断是否包含期望的类名等情况时,就一定要先包含 <cstring> 头文件,否则编译器无法识别 strstr 函数,会出现编译错误,提示该函数未定义之类的问题,进而影响整个程序逻辑的实现。
 

三、类Animal成员name为string对象,需要包含头文件<string>

        在 C++ 中,如果类 Animal 的成员变量 name 被定义为 string 对象,那就必须要包含 <string> 头文件。string 类型是 C++ 标准库中提供的一个非常方便且功能强大的字符串类型,相较于传统的 C 语言风格的字符数组表示字符串(如 char str[]),它具有很多优势,比如自动管理内存、提供丰富的字符串操作方法等。

   <string> 头文件中定义了 std::string 类以及与之相关的众多成员函数和操作符重载等内容,使得我们可以像操作基本数据类型一样便捷地对字符串进行赋值、拼接、比较、获取长度等操作。例如:
 

class Animal {
public:
    std::string name;  // 这里定义了 name 为 string 对象,用于存储动物的名称
    // 可以继续定义其他 Animal 类的成员函数等内容
};

Animal dog;
dog.name = "旺财";  // 利用 string 类的赋值操作符进行赋值,非常方便
std::cout << dog.name << " is a lovely dog." << std::endl;

        要是没有包含 <string> 头文件,编译器在处理涉及 std::string 类型的代码时,就不知道 std::string 是什么,无法识别相关的构造函数、成员函数等操作,从而导致编译失败,所以这个头文件对于处理 string 类型的成员变量是必不可少的。


四、调用rand()函数,需要包含头文件<stdlib>

        当在代码中调用 rand() 函数时,需要包含 <stdlib> 头文件。rand() 函数是 C/C++ 标准库中用于生成伪随机数的一个常用函数,它会返回一个范围在 0 到 RAND_MAXRAND_MAX 是一个在 <stdlib> 头文件中定义的宏常量,通常其值较大,不同系统下可能有所不同,常见值为 32767)之间的整数。

        例如,我们可以利用 rand() 函数来模拟一些随机事件或者为程序中的某些变量赋予随机初始值等情况,以下是一个简单示例:

#include <iostream>
#include <stdlib>
#include <ctime>  // 常与 <stdlib> 配合使用,用于设置随机数种子

int main() {
    srand(static_cast<unsigned int>(time(nullptr)));  // 设置随机数种子,以获取不同的随机序列
    int randomNumber = rand();  // 生成一个随机数
    std::cout << "生成的随机数为: " << randomNumber << std::endl;
    return 0;
}

        在上述代码中,先是通过 srand 函数结合 time 函数(time 函数所在的 <ctime> 头文件常配合 rand 使用,用于根据当前时间设置随机数种子,使得每次运行程序生成的随机数序列不同)来初始化随机数生成器,然后调用 rand() 函数获取一个随机数并输出。
        如果没有包含 <stdlib> 头文件就去调用 rand() 函数,编译器会提示找不到该函数的定义,导致代码无法正确编译和运行,所以在涉及到需要生成随机数的编程场景中,记得要引入这个头文件来保证程序的正常运作。