C++程序教学
文章平均质量分 70
c++基础
糖果Autosar
AutoSAR架构专家,分享AutoSAR学习笔记和心得体会,提供咨询和答疑。粉丝们尽量在博文评论区留言你们咨询的问题,有空我会统一回答
展开
-
What are the differences between protected and private inheritance?
【代码】What are the differences between protected and private inheritance?原创 2024-09-09 23:14:42 · 226 阅读 · 0 评论 -
string字符会调用new分配堆内存吗
gcc的string默认大小是32个字节,字符串小于等于15直接保存在栈上,超过之后才会使用new分配。原创 2024-09-08 14:03:31 · 356 阅读 · 0 评论 -
A const member function
【代码】A const member function。原创 2024-07-17 22:08:06 · 216 阅读 · 0 评论 -
循环缓冲区概述
循环缓冲区首先是空的,并具有设定的长度。下图中是一个 7 个元素缓冲区:假设 1 写在一个循环缓冲区的中心(循环缓冲区中,起始位置并不重要):然后假设将另外两个元素添加到循环缓冲区 — 2 和 3 — 它们被放在 1 之后:如果删除了两个元素,则循环缓冲区中最旧的两个值将被删除。循环缓冲区使用 FIFO(先进先出)逻辑。在示例中,1 和 2 最先进入循环缓冲区,它们最先被删除,缓冲区内留下 3。原创 2023-03-04 22:20:54 · 1729 阅读 · 0 评论 -
现代 C++ 中类型特征( type traits)的快速入门
类型特征是一个简单的模板结构,它包含一个成员常量,它又包含类型特征提出的问题或它执行的转换的答案。例如,让我们看一下C++ 标准库在``模板结构 is_floating_point;这个类型特征告诉一个类型是否T是浮点数。成员常量——value要求提出问题的类型特征——将被设置为true或false根据作为模板参数传入的类型。另一方面,例如,一个类型特征会改变T模板结构 移除参考;这种类型特征基本上变成T&了T. 成员常量——type。...原创 2022-08-30 13:54:53 · 980 阅读 · 0 评论 -
c++ traits特性萃取技术
traits,又被叫做特性萃取技术,说得简单点就是提取“被传进的对象”对应的返回类型,让同一个接口实现对应的功能。因为STL的算法和容器是分离的,两者通过迭代器链接。算法的实现并不知道自己被传进来什么。萃取器相当于在接口和实现之间加一层封装,来隐藏一些细节并协助调用合适的方法,这需要一些技巧(例如,偏特化)。最后附带一个小小的例子,应该能更好地理解 特性萃取。下面大部分来源于《STL源码剖析》,看原书能了解更多细节。...原创 2022-08-30 11:48:29 · 1165 阅读 · 0 评论 -
C++ 中的 typeid 运算符和示例
typeid是C++ 中的运算符。原创 2022-08-29 16:18:09 · 868 阅读 · 0 评论 -
构造函数可以在类的私有部分中定义吗?
先决条件:构造函数构造函数是类的特殊成员函数,它初始化类的对象。在 C++ 中,创建类的对象时会自动调用构造函数。默认情况下,构造函数定义在类的公共部分。那么,问题是可以在类的私有部分中定义构造函数吗?答:是的,构造函数可以在类的私有部分中定义。原创 2022-08-23 18:29:15 · 694 阅读 · 0 评论 -
C++静态库与动态库
库是写好的现有的,成熟的,可以复用的代码。现实中每个程序都要依赖很多基础的底层库,不可能每个人的代码都从零开始,因此库的存在意义非同寻常。本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行。库有两种:静态库(.a、.lib)和动态库(.so、.dll)。所谓静态、动态是指链接。回顾一下,将一个程序编译成可执行程序的步骤:[图:编译过程二者的不同点在于代码被载入的时刻不同。- 静态库在程序编译时会被连接到目标代码中,程序运行时将不再需要该静态库,因此体积较大。原创 2022-08-22 11:52:35 · 899 阅读 · 0 评论 -
c++中将字符串转换为无符号整数函数:std::stoul and std::stoull
将字符串转换为 unsigned long long。解析 str 将其内容解释为指定基数的整数,该基数作为 unsigned long long 类型的值返回。另一个例子:比较两个包含十六进制值的字符串的程序这里使用stoul,但在数字超过 unsigned long 值的情况下,使用stoull。将字符串转换为无符号整数。解析 str ,将其内容解释为指定基数的整数,该基数作为无符号长整型值返回。原创 2022-08-22 11:19:57 · 3798 阅读 · 0 评论 -
在 C++ STL 中复制的不同方法 | std::copy()、copy_n()、copy_if()、copy_backward()
copy(strt_iter1, end_iter1, strt_iter2) :用于将一系列元素从一个容器复制到另一个容器的通用复制函数。copy_n(strt_iter1, num, strt_iter2) :此版本的副本允许自由选择必须在目标容器中复制多少元素。strt_iter2 :指向目标容器开头的指针,指向必须开始复制元素的位置。strt_iter2 :指向目标容器开头的指针,指向必须开始复制元素的位置。strt_iter1 :指向源容器开头的指针,必须从那里开始复制元素。...原创 2022-08-12 17:50:03 · 1954 阅读 · 0 评论 -
C++11模板元编程-std::enable_if示例详解
由上可知,只有当第一个模板参数为true时,enable_if会包含一个type=T的公有成员,否则没有该公有成员。std::enable_if使用场景。原创 2022-08-12 17:30:22 · 1062 阅读 · 0 评论 -
Std::Decay 简介
Type T 应用左值到右值 (LVALUE-TO-RVALUE)、Array-to-Pointer with Function-to-Pointer隐式转换。转换将删除类型 T的 CV 限定符(Const 和 Volatile 限定符)并将结果类型的类型定义为成员衰减 < T >::Type。这种转换与传输所有参数时的转换非常相似。...原创 2022-08-12 17:12:00 · 294 阅读 · 0 评论 -
什么是 C++ 中的数组衰减?如何预防?
数组类型和维度的丢失称为数组衰减。这通常发生在我们通过值或指针将数组传递给函数时。它所做的是,它将数组第一个元素地址作为指针发送给的,因此数组的大小不是原始的,而是指针在内存中占用的大小。...原创 2022-08-12 16:49:14 · 497 阅读 · 1 评论 -
C++ STL中的Multimap概述
Multimap 类似于map,但多个元素可以具有相同的键。此外,在这种情况下,键值和映射值对不必是唯一的。关于 multimap 需要注意的一件重要事情是 multimap 始终保持所有键的排序顺序。multimap 的这些特性使其在竞争性编程中非常有用。与Multimap 相关的一些基本功能:begin() – 将迭代器返回到Multimap 中的第一个元素end() – 将迭代器返回到Multimap 中最后一个元素之后的理论元素size() – 返回Multimap 中的元素数量。......原创 2022-08-12 11:07:53 · 749 阅读 · 0 评论 -
C++ STL库中的multimap::emplace()用法
multimap::emplace()是 C++ STL 中的内置函数,它将键及其元素插入到 multimap 容器中。它有效地将容器大小增加了1个,因为 multimap 是存储具有相同值的多个键的容器。句法:multimap_name . emplace(key , element) 参数:该函数接受两个强制性参数,如下所述:key –指定要插入到multimap容器中的键。element - 指定要插入到multimap容器中的键的元素。返回值:该函数不返回任何内容。...原创 2022-08-12 10:41:40 · 563 阅读 · 0 评论 -
C++ STL模板库中multimap::equal_range()的用法
multimap::equal_range()是 C++ STL 中的内置函数,它返回对的迭代器。该对的迭代器是指一个范围的边界,该范围包括容器中具有等效于 k 的键的所有元素。如果没有与键 K 匹配,则返回的范围长度为 0,两个迭代器都指向在 k 之后第一个元素,根据容器的内部比较对象 (key_comp),该元素的键被认为在 k 之后。...原创 2022-08-11 18:24:28 · 1292 阅读 · 0 评论 -
C++ STL库中的map::equal_range()用法
map::equal_range()是 C++ STL 中的内置函数,它返回一对迭代器。该对是指一个范围的边界,该范围包括容器中具有等效于 k 的键的所有元素。由于映射容器只包含唯一键,因此返回的对中的第一个迭代器因此指向该元素,而对中的第二个迭代器指向键 K 之后的下一个键。如果没有与键 K 匹配并且key K 大于最大 key ,返回的范围长度为 1,两个迭代器都指向一个元素,该元素的 key 表示 map 的大小,元素为 0。参数:此函数接受单个强制参数键,该键指定要返回容器中其范围的元素。...原创 2022-08-10 14:49:52 · 1951 阅读 · 0 评论 -
c++怎么传递函数
函数是一组接受输入、执行某些特定计算并产生输出的语句。使用函数的想法是一起执行一些常见或重复完成的任务,以便为不同的输入一次又一次地编写相同的代码。将函数作为参数传递是C/C++中的一个有用概念。在将自定义比较器函数作为参数传递到std::sort()以根据需要对对象 序列进行排序时,已经使用了这个概念。在本文中,我们将讨论设计接受另一个函数作为参数的函数的不同方法。...原创 2022-08-10 14:28:38 · 2254 阅读 · 0 评论 -
C++ 中的 string::npos 示例
是一个无符号整数类型,而-1是这个类型的最大可能表示值。静态常量size_tnpos=-1;类型的元素具有最高可能值,它用-1定义。常量定义为-1的值,因为。原创 2022-07-28 14:33:31 · 663 阅读 · 0 评论 -
C/C++中的协程
协程是通用的controlstructures,其中流控制在两个不同的例程之间协同传递而不会返回。如果您使用过Python或C#,您可能知道有一个名为yield的关键字,它允许示例是使用yield的Python3代码。1234这段代码演示了yield的工作原理,并简要介绍了howthecontrolischangedbetweenthecallerandcallee。...原创 2022-07-28 10:38:13 · 717 阅读 · 0 评论 -
C++ 中的模板元编程
程序计算“2的8次幂(或2^8)”。事实上,结构体funStruct可用于计算任何已知n(或常数n)的2^n。上述程序的特殊之处在于计算是在编译时完成的。因此,计算2^8是编译器完成的。预测以下C++程序的输出。...原创 2022-07-23 13:24:00 · 853 阅读 · 1 评论 -
C++中的构造函数重载
C++ 中,我们可以在同名的类中拥有多个构造函数,只要每个构造函数具有不同的参数列表即可。这个概念称为构造函数重载,与函数重载非常相似。重载的构造函数本质上具有相同的名称(类的确切名称),但参数的数量和类型不同。根据传递的参数的数量和类型调用构造函数。在创建对象时,必须传递参数以让编译器知道需要调用哪个构造函数。// C++ program to illustrate// Constructor overloading#include <iostream>using names原创 2022-02-05 17:30:21 · 2079 阅读 · 0 评论 -
C++中用于动态内存的new和delete运算符
C/C++中的动态内存分配是指由程序员手动进行内存分配。动态分配的内存在堆上分配,非静态和局部变量在栈上分配内存(有关详细信息,请参阅内存布局 C 程序)。什么是应用程序?动态分配内存的一种用途是分配可变大小的内存,这在编译器分配的内存中是不可能的,除了可变长度数组。最重要的用途是为程序员提供的灵活性。我们可以在需要和不再需要时自由分配和释放内存。在许多情况下,这种灵活性会有所帮助。此类情况的示例是Linked List、Tree等。它与分配给普通变量的内存有何不同?对于“int a”、“ch原创 2022-02-04 16:31:37 · 1616 阅读 · 0 评论 -
C++ 中的智能指针以及如何使用它们
在本文中,我们将讨论 C++ 中的智能指针。什么是智能指针,为什么以及如何正确使用它们?指针用于访问程序外部的资源——比如堆内存。因此,为了访问堆内存(如果在堆内存中创建了任何东西),需要使用指针。当访问任何外部资源时,我们只使用资源的副本。如果我们对其进行任何更改,我们只需在复制的版本中进行更改。但是,如果我们使用指向资源的指针,我们将能够更改原始资源。普通指针的问题看看下面的代码。#include <iostream>using namespace std;class Rect原创 2022-02-03 17:37:37 · 1852 阅读 · 0 评论 -
在 C++ 中使用显式关键字
C++ 中的显式关键字用于标记构造函数以不隐式转换 C++ 中的类型。对于只接受一个参数并适用于构造函数(带有单个参数)的构造函数,它是可选的,因为它们是唯一可用于类型转换的构造函数。让我们通过一个例子来理解显式关键字。预测以下 C++ 程序的输出// CPP Program to illustrate default// constructor without 'explicit'// keyword#include <iostream>using namespace std;原创 2022-01-30 22:25:05 · 479 阅读 · 0 评论 -
C++ 中的运算符重载
在 C++ 中,我们可以让运算符为用户定义的类工作。这意味着 C++ 能够为运算符提供对数据类型的特殊含义,这种能力称为运算符重载。例如,我们可以在像 String 这样的类中重载运算符“+”,这样我们就可以通过使用 + 来连接两个字符串。可能重载算术运算符的其他示例类是复数、小数、大整数等。一个简单而完整的例子#include<iostream>using namespace std;class Complex {private: int real, imag;public:原创 2022-01-30 21:08:54 · 434 阅读 · 0 评论 -
C++ 中的继承
一个类从另一个类派生属性和特征的能力称为继承。继承是面向对象编程最重要的特性之一。**子类:**从另一个类继承属性的类称为子类或派生类。**超类:**属性被子类继承的类称为基类或超类。文章分为以下子主题:[为什么以及何时使用继承?](https://www.geeksforgeeks.org/inheritance-in-c/?ref=leftbar-rightbar#Why and when to use inheritance?)[继承方式](https://www.geeksforgeek原创 2022-01-30 20:00:13 · 371 阅读 · 0 评论 -
C++ 中的模板
C++ 中的模板模板是 C++ 中一个简单但功能强大的工具。简单的想法是将数据类型作为参数传递,这样我们就不需要为不同的数据类型编写相同的代码。例如,一家软件公司可能需要 sort() 来处理不同的数据类型。我们可以编写一个 sort() 并将数据类型作为参数传递,而不是编写和维护多个代码。C++ 添加了两个新的关键字来支持模板:‘template’和’typename’。第二个关键字总是可以用关键字’class’代替。模板如何工作?模板在编译器时展开。这就像宏。不同之处在于,编译器会在模板扩展之前原创 2022-01-30 18:58:39 · 1112 阅读 · 0 评论 -
C++ 中的虚函数和运行时多态| 第 1 套(介绍)
本文介绍了多态性和虚函数的概念,以及它们在继承中的使用。我们将介绍以下内容定义没有虚拟函数使用虚拟函数定义:虚函数是在基类中使用关键字 virtual 声明并由派生类重新定义(覆盖)的成员函数。术语多态性意味着采取多种形式的能力。如果存在通过继承相互关联的类的层次结构,则会发生这种情况。类层次结构注意:在 C++ 中,这意味着如果我们调用成员函数,那么它可能会导致执行不同的函数,这取决于调用它的对象类型。考虑以下简单程序作为运行时多态性的示例。关于程序的主要注意事项是派生类原创 2022-01-30 15:28:59 · 527 阅读 · 0 评论 -
C++中的虚函数
虚函数是在基类中声明并由派生类重新定义(覆盖)的成员函数。当您使用指针或对基类的引用来引用派生类对象时,您可以为该对象调用虚函数并执行派生类的函数版本。虚函数确保为对象调用正确的函数,而不管用于函数调用的引用(或指针)的类型。它们主要用于实现运行时多态性函数在基类中使用virtual关键字声明。函数调用的解析是在运行时完成的。虚拟功能规则虚函数不能是静态的。虚函数可以是另一个类的友元函数。应该使用基类类型的指针或引用来访问虚函数,以实现运行时多态性。虚函数的原型在基类和派生类中应该是原创 2022-01-30 00:50:35 · 2290 阅读 · 0 评论 -
C++中虚函数和纯虚函数的区别
**C++ 中**的虚函数 虚函数是在基类中声明并由派生类重新定义(覆盖)的成员函数。当您使用指针或对基类的引用来引用派生类对象时,您可以为该对象调用虚函数并执行派生类的函数版本。**C++ 中的纯虚函数C++ 中**的纯虚函数(或抽象函数)是我们没有实现的虚函数,我们只声明它。通过在声明中分配 0 来声明纯虚函数。虚函数和纯虚函数的相似之处这些是运行时多态性的概念。原型,即两个函数的声明在整个程序中保持不变。这些函数不能是全局的或静态的。C++中虚函数和纯虚函数的区别虚函数纯虚原创 2022-01-29 23:36:58 · 372 阅读 · 0 评论 -
C++ 中的纯虚函数和抽象类
有时,由于我们不知道实现,因此无法在基类中提供所有功能的实现。这样的类称为抽象类。例如,让 Shape 成为一个基类。我们无法在 Shape 中提供函数 draw() 的实现,但我们知道每个派生类都必须有 draw() 的实现。同样,Animal 类没有 move() 的实现(假设所有动物都移动),但所有动物都必须知道如何移动。我们不能创建抽象类的对象。C++中的纯虚函数(或抽象函数)是虚函数我们可以实现,但是我们必须在派生类中重写该函数,否则派生类也将成为抽象类(有关我们在哪里为此类函数提供实现的更多信原创 2022-01-29 23:12:36 · 1133 阅读 · 0 评论