
C++基础语法
基础概念与简单代码讲解
Crazy learner
边学边记录
展开
-
详细讲解 C 语言中的 #ifndef 和 #endif 语法
ifndef 和 #endif 是 C 语言中的条件编译指令,主要用于防止头文件的重复包含,以及在编译时根据不同条件选择性地包含代码。它们是编写高效、可维护 C 代码的基础工具之一,特别是在多文件、大型项目中尤为重要。通过合理使用这些指令,我们可以避免编译冲突、提高编译效率,并能在不同的环境下灵活控制代码的执行。原创 2024-11-15 08:01:48 · 4078 阅读 · 0 评论 -
深度解析 C 语言中的作用域、变量声明及错误处理
当你在一个函数中声明了一个变量,但在另一个函数中使用时,可能会出现未定义标识符的错误。例如,假设你在一个源文件中使用 static 声明了一个队列,但在另一个文件中尝试访问它。错误示例// 只能在此文件访问// main.c// 错误: DbQueue 未定义return 0;在 main.c 中无法访问 DbQueue,因为它是 static 的。原创 2024-10-29 08:10:49 · 444 阅读 · 0 评论 -
友元函数和友元类
在C++中,友元函数和友元类提供了一种机制,可以使非成员函数或其他类访问类的私有成员和保护成员。在上述代码中,Beta类是Alpha类的友元类,因此Beta类可以访问Alpha类的私有成员value。在上述代码中,Square类被声明为Rectangle类的友元类,因此Square类中的成员函数可以访问Rectangle类的私有成员width和height。友元函数是一个不是类成员的函数,但它却可以访问该类的私有成员和保护成员。友元函数:一个不是类成员的函数,但它可以访问该类的私有成员和保护成员。原创 2024-08-04 13:48:17 · 332 阅读 · 0 评论 -
函数重载、运算符重载、虚函数、纯虚函数、抽象类
在C++中,多态性(Polymorphism)是面向对象编程的核心概念之一,允许同一接口调用不同的实现。虚函数是指在基类中使用关键字 virtual 声明的成员函数,允许在派生类中重写该函数,并通过基类指针或引用调用时,执行派生类的实现。纯虚函数是指在基类中声明但不提供实现的虚函数,用 = 0 表示。虚函数:基类中的虚函数允许派生类重写,并通过基类指针或引用调用时实现动态绑定。纯虚函数:基类中声明但不实现的虚函数,派生类必须实现它。抽象类:包含纯虚函数的类,不能实例化,只能被继承。原创 2024-08-04 13:47:31 · 185 阅读 · 0 评论 -
单继承、多继承、虚继承
在上述代码中,类DerivedA和DerivedB都虚继承了Base类,而DerivedC继承了DerivedA和DerivedB。通过虚继承,DerivedC只有一个Base类的实例,避免了菱形继承问题。C++支持单继承、多继承和虚继承。虚继承用于解决多继承中的菱形继承问题。当一个类从两个类继承,而这两个类又从同一个基类继承时,会导致子类包含两个基类实例。多继承:子类可以继承多个基类,但可能会带来复杂性,如命名冲突。虚继承:用于解决多继承中的菱形继承问题,确保只有一个基类实例。原创 2024-08-04 13:46:41 · 265 阅读 · 0 评论 -
类定义、对象创建、类成员(变量和方法)
类定义:定义了一个Car类,包括公有成员变量brand、model、year,一个构造函数,以及一个公有成员方法displayInfo。对象是类的实例,通过对象可以访问类的成员变量和方法。下面是一个具体的例子,通过这个例子来理解类和对象的概念,以及如何使用类成员。私有成员:price变量和setPrice方法是私有的,不能从类外部访问。访问成员:通过对象可以访问公有成员变量和调用公有成员方法。成员变量:类中定义的变量,用于存储对象的状态。成员函数:类中定义的函数,用于实现对象的行为。原创 2024-08-04 13:45:40 · 143 阅读 · 0 评论 -
函数对象和Lambda表达式
在上述代码中,第一次std::transform使用按值捕获,将addValue的值复制到Lambda表达式中,因此addValue的变化不会影响Lambda表达式的结果。第二次std::transform使用按引用捕获,因此addValue的变化会影响Lambda表达式的结果。函数对象和Lambda表达式都是实现可调用对象的方式。Lambda表达式则通过简洁的语法定义匿名函数,适合临时性和简单的可调用对象。函数对象和Lambda表达式是C++中的两个强大功能,用于实现可调用对象和简化代码。原创 2024-08-04 13:45:00 · 152 阅读 · 0 评论 -
排序、搜索、数值算法
排序算法用于数据的排序,搜索算法用于在数据中查找特定元素,数值算法用于执行数学计算。这些算法在不同的应用场景中发挥着重要作用,理解并掌握这些算法将有助于提高编程能力和解决问题的效率。在C++领域,算法是编程中的一个关键组成部分,主要包括排序算法、搜索算法和数值算法。常见的排序算法有冒泡排序、插入排序、选择排序、快速排序和归并排序等。二分搜索是一种高效的搜索算法,适用于已经排序的数据,时间复杂度为O(log n)。快速排序是一种高效的排序算法,平均时间复杂度为O(n log n)。原创 2024-08-04 13:43:53 · 324 阅读 · 0 评论 -
vector, list, deque, set, map
map:关联容器,存储键值对,键唯一,自动排序,支持快速查找、插入和删除。list:双向链表,支持在任意位置快速插入/删除,不支持快速随机访问。deque:双端队列,支持在两端快速插入/删除,支持快速随机访问。list 是一个双向链表,允许在任何位置快速插入和删除元素。vector:动态数组,支持快速随机访问和在末尾插入/删除。set:集合,存储唯一元素,自动排序,支持快速查找。set 是一个集合,存储唯一的元素,自动排序。键是唯一的,支持快速查找、插入和删除。不允许重复元素,支持快速查找。原创 2024-08-04 13:42:52 · 121 阅读 · 0 评论 -
new 和 delete
然而,需要小心避免内存泄漏和未定义行为,确保每个new都有对应的delete来释放内存。动态内存分配:运行时根据需要分配内存,可以在程序运行期间灵活地申请和释放内存,适用于需要灵活大小的数据结构,如动态数组、链表等。内存泄漏:如果忘记使用delete释放通过new分配的内存,会导致内存泄漏,程序会消耗越来越多的内存。匹配:对于单个对象使用delete,对于数组使用delete[],不匹配的释放方式会导致未定义行为。静态内存分配:编译时分配内存,内存在整个程序运行期间一直存在,如全局变量和局部变量。原创 2024-08-04 13:41:29 · 139 阅读 · 0 评论 -
指针基本概念、指针运算、引用
指针是一个变量,其值为另一个变量的内存地址。通过指针可以间接访问该变量。引用是变量的别名,必须在声明时初始化,并且初始化后不能改变引用的对象。修改引用的对象:指针可以改变指向不同的对象,而引用在初始化后不能改变。指针可以进行算术运算,例如加减操作,但这些运算通常用于数组的遍历。引用通常用于函数参数和返回值,以避免拷贝大数据结构,提高效率。初始化:指针可以在声明后再赋值,而引用必须在声明时初始化。空值:指针可以为空(NULL),而引用必须引用有效的对象。函数可以返回引用,这样可以直接操作调用函数的对象。原创 2024-08-04 13:39:27 · 162 阅读 · 0 评论 -
一维数组、多维数组、字符串处理
在C++中,数组和字符串是用于存储和操作一组数据的基本数据结构。字符串处理: C风格字符串使用字符数组处理,std::string类提供了更现代和方便的字符串操作方法。在C++中,字符串可以使用C风格字符串(字符数组)或std::string类来处理。std::string类是处理字符串的更现代和方便的方式,提供了丰富的操作函数。多维数组: 多维数组是数组的数组,常用于表示矩阵等多维数据,可以静态或动态分配。多维数组是数组的数组,最常见的是二维数组,可以看作是矩阵。二维数组的声明和初始化。原创 2024-08-04 13:35:51 · 266 阅读 · 0 评论 -
条件语句(if, switch)、循环语句(for, while, do-while)
循环语句: for、while和do-while循环用于重复执行某段代码,分别适用于已知次数、条件控制和至少执行一次的情况。条件语句: if、if-else、if-else if-else和switch语句用于根据条件的真假决定程序的执行路径。C++中的控制结构主要包括条件语句和循环语句,用于控制程序的执行流程。if语句用于判断条件是否为真,如果为真则执行相应的代码块。条件语句用于根据某个条件的真假来决定执行哪部分代码。if-else语句在条件为假时执行另一部分代码。循环语句用于重复执行某段代码。原创 2024-08-04 13:34:57 · 314 阅读 · 0 评论 -
标准输入输出流std::cin和std::cout
这些示例展示了如何使用std::cin和std::cout进行基本的输入和输出操作。在C++中,输入输出通常通过标准输入输出流std::cin和std::cout来实现。使用std::cin处理字符串输入时,有两种常见方式:使用>>运算符和使用getline函数。可以结合使用std::cin和std::cout来实现一个简单的交互式程序。std::cin用于从控制台输入数据。是提取运算符,用于从右侧的输入流中提取数据并存储到左侧的变量中。<< 是插入运算符,用于将右侧的值插入到左侧的输出流中。原创 2024-08-04 13:33:31 · 288 阅读 · 0 评论 -
算术操作符、关系操作符、逻辑操作符、位操作符
关系操作符用于比较两个值,结果是布尔值(true或false)。逻辑操作符用于执行逻辑运算,结果是布尔值。算术操作符用于执行数学运算,如加减乘除等。位操作符用于对整数的二进制位进行操作。原创 2024-08-04 13:31:36 · 149 阅读 · 0 评论 -
变量、数据类型和常量
在C++中,变量的声明和初始化可以同时进行。声明是指告知编译器变量的名称和类型,初始化是指为变量赋予初始值。数据类型决定了变量可以存储的数据种类,包括基本数据类型如int, float, char, bool等。每个变量都有一个特定的数据类型,决定了变量可以存储的数据种类。常量是值在程序执行过程中不能改变的量,使用const关键字声明。void: 空类型,通常用于函数返回类型,表示函数不返回任何值。在C++中,常量通常使用const关键字来声明。变量是程序中存储数据的命名位置,其值可以改变。原创 2024-08-04 13:29:10 · 151 阅读 · 0 评论