随笔分类 - C++
摘要:目录1. 概念2. 示例3. 总结 在C++中,加上 virtual 关键字可以实现多态,这是因为它允许函数在基类和派生类中有不同的实现,并确保在运行时正确调用派生类的方法。具体来说,这种机制称为“动态绑定”或“运行时多态”。 1. 概念 虚函数(Virtual Function): 当你在基类中声
阅读全文
摘要:目录1. 仿函数的定义和使用2. 仿函数的优点3. 总结 仿函数(Functor)是C++中的一种重要概念,它指的是一个重载了operator()的类或结构体。仿函数允许你像使用普通函数一样使用类的实例。它们通常用于需要函数作为参数的算法或需要自定义操作的场景。 1. 仿函数的定义和使用 定义仿函数
阅读全文
摘要:目录1. 声明与定义2. 常量成员函数的特点3. 常量成员函数的使用4. 关键字 mutable5. 总结 在C++中,常量成员函数(const member function)是指在函数声明的尾部加上 const 关键字的成员函数。这种函数不能修改类的成员变量,也不能调用会修改类成员变量的其他成员
阅读全文
摘要:目录1. 指针悬挂的成因2. 防止指针悬挂的方法3. 例子与实践4. 总结 指针悬挂(Dangling Pointer)是C++编程中常见的一个问题,它指的是一个指针指向了已经被释放或者无效的内存区域。当对悬挂指针进行解引用操作时,程序行为将是未定义的,可能会导致崩溃、数据损坏或其他意外行为。 1.
阅读全文
摘要:目录1. 构造函数参数列表初始化的语法2. 为什么使用参数列表初始化3. 示例4. 常量和引用成员的示例5. 使用参数列表初始化的注意事项6. 总结 在C++中,构造函数参数列表初始化(initializer list)是一种用于在对象创建时初始化成员变量的语法。这种方式在性能和可读性方面具有一些优
阅读全文
摘要:目录1. 指针数组2. 数组指针2.1 *ptr[i]与(*ptr)[i]的区别3. 区别总结 在C++中,指针数组和数组指针是两个不同的概念,它们的名字虽然相似,但含义和使用方式都有明显的区别。以下是详细的介绍和区别: 1. 指针数组 指针数组(Array of Pointers)是一个数组,其中
阅读全文
摘要:目录1. 指针函数2. 函数指针3. 区别总结 在C++中,指针函数和函数指针是两个不同的概念,尽管它们的名字非常相似。以下是详细的介绍和区别: 1. 指针函数 指针函数(Pointer to a function)是返回类型为指针的函数。 它的返回值是一个指向某种数据类型的指针。以下是一个示例:
阅读全文
摘要:目录1. 使用函数指针2. 使用函数对象(仿函数)3. 使用std::function和std::bind4. 小结 回调函数是一种允许函数作为参数传递给另一个函数的机制。在C++中,回调函数常用于实现事件驱动编程、异步操作和可重用性等功能。 C++中有多种实现回调函数的方法,包括使用函数指针、函数
阅读全文
摘要:目录1. 一维数组1.1 数组退化1.2 指针算术1.2.1 arr 是指向第一个元素的地址1.2.2 arr[i] 表示什么?2. 二维数组2.1数组退化2.2 示例解释2.3 总结 1. 一维数组 #include <iostream> // 函数声明,形参为一个数组和一个整数 void pri
阅读全文
摘要:目录1. 基本语法1.1 示例2. 实际应用3. 注意事项 函数指针是指向函数的指针,它保存了函数的地址,可以通过它调用指向的函数。函数指针在C++中具有多种用途,例如回调函数、动态函数调用以及实现多态等。 1. 基本语法 函数指针的声明语法如下: 返回类型 (*指针名)(参数列表); 1.1 示例
阅读全文
摘要:目录1. 基本用法2. 复杂类型3. 结构体4. 模板5. 注意事项 在C++中,typedef关键字用于为现有的数据类型定义一个新的名字(别名)。这可以使代码更清晰、更易读,特别是当涉及复杂类型或常用类型时。 以下是一些使用typedef的示例: 1. 基本用法 typedef int Integ
阅读全文
摘要:野指针(Dangling Pointer)是在C++中指向无效内存地址的指针。野指针通常发生在以下几种情况下: 释放了内存但没有将指针设为NULL: 当使用delete或delete[]释放内存后,没有置NULL,导致指针随意指向了一个内存地址。 int* ptr = new int(10); de
阅读全文
摘要:1. 就地初始化、初始化列表 在C++中,成员变量可以通过就地初始化和初始化列表进行初始化。 就地初始化:在C++11及更高版本中,可以在声明成员变量时直接进行初始化。例如: class MyClass { public: int x = 5; // 就地初始化 }; 这样,在创建 MyClass
阅读全文
摘要:rfind 是 C++ 标准库中字符串类(例如 std::string)提供的成员函数之一。它用于在字符串中从后往前搜索指定子字符串,并返回找到的最后一个匹配的位置(索引)。如果未找到匹配,它返回 std::string::npos,这是一个常量,表示没有找到匹配。 rfind 的原型如下: siz
阅读全文
摘要:substr() 是 C++ 标准库中的一个字符串处理函数,用于截取字符串的一部分。它的原型如下: std::string substr(size_t pos = 0, size_t count = npos) const; 这个函数接受两个参数,分别是 pos 和 count: pos:指定要截取
阅读全文
摘要:目录1. 静态成员变量2. 静态成员函数3. 静态成员的使用场景4. 注意事项5. 总结 在C++中,静态成员函数和静态成员变量是与类相关联而不是与类的实例相关联的。它们属于类而不是类的实例,并且可以通过类名访问,而不需要创建类的实例。 1. 静态成员变量 定义和声明 静态成员变量在类中声明时使用s
阅读全文
摘要:在C++中,除了使用for循环之外,还可以使用其他方法来输出列表中的值。其中一些替代方法包括使用范围-based for 循环、迭代器、以及标准库算法等。以下是一些示例: 使用范围-based for 循环: #include <iostream> #include <list> int main(
阅读全文
摘要:在C++中,宏是一种预处理指令,用于在编译过程中执行简单的文本替换。宏通常用于定义常量、创建简单的代码片段或执行简单的文本替换。以下是一些C++中宏的基本用法和注意事项: 宏的定义: #define MACRO_NAME value 这会将MACRO_NAME定义为value,在编译过程中会在代码中
阅读全文
摘要:在C++中,引用符号 & 和访问内存地址的 & 运算符有不同的用途和含义。 引用符号 &:创建引用 使用 & 符号可以创建引用,即给一个变量起一个别名。引用是一个别名,它与原变量共享相同的内存地址。 引用在声明时必须初始化,并且一旦初始化后,不能再引用其他变量。 int x = 10; int& r
阅读全文
摘要:在C++中,常量指针和指针常量是两个不同的概念,它们涉及到指针和常量的组合。让我们来详细解释它们的含义: 常量指针(Constant Pointer): 一个常量指针是指针本身是常量,它指向的内容可以被修改。 一旦指针被初始化指向某个变量,就不能再指向其他变量。 通过指针可以修改所指向的变量的值。
阅读全文