
C++
文章平均质量分 75
你回到了你的家
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
C++ Primer Plus 15 Friends, Expections, and More
接下来需要为类提供用于更改设置的方法,即修改Channel和Volume的方法。遥控器应该复制电视内置的控制功能。其许多方法可以通过使用电视的方法来实现。此外,遥控器通常提供随机接入频道选择功能(电视控制时候需要一个频道一个频道换台)。实现后的电视类和遥控器类如Listing 15.1所示,其中如下的语句将。真实情况是遥控器可以修改电视的状态,这表明可以将。首先介绍一个使用友元类的例子。假设我们需要编写一个电视和遥控器的模拟程序,此时需要定义表示电视的。类和一个表示遥控器的。原创 2024-04-26 15:05:45 · 714 阅读 · 0 评论 -
C++大型项目经验
在Visual Studio中,“附加包含目录”(Additional Include Directories)是一个编译器设置,它指示编译器在查找包含文件(通常是头文件,扩展名为.h或.hpp)时去哪些额外的文件夹路径查找。记住,"附加包含目录"只影响预处理器查找头文件的位置,它并不会告诉链接器在哪里查找库文件(.lib、.dll等)。链接库文件的路径需要在“链接器”->“常规”下的“附加库目录”中设置。原创 2023-12-11 14:37:42 · 481 阅读 · 0 评论 -
17 输入、输出和文件
4.4 命令行处理技术wc report1 report2 report3int main(int argc,char *argv[])wc report1 report2 report3下面的程序计算命令行上列出的文件包含的字符数:程序 17.17 count.cpp// count.cpp -- counting characters in a list of files#include <iostream>#include <fstream>原创 2022-05-25 01:11:56 · 92 阅读 · 0 评论 -
18 探讨C++新标准
7 C++11新增的其他功能7.4 杂项C99引入了依赖于实现的拓展整型,C++11继承了这种传统。在使用128位整数的系统中,可使用这样的类型。在C语言中,扩展类型由头文件stdint.h支持,而在C++中,为头文件cstdint。C++11提供了一种创建用户自定义字面量的机制:字面量运算符(literal operator)。使用这种机制可定义二进制字面量,如101001b,相应的字面量运算符把他转换为整数值。C++提供了调试工具assert。这是一个宏,它在运行阶段对断言进行检查,如果为tru原创 2022-05-19 19:21:28 · 544 阅读 · 0 评论 -
6 分支语句和逻辑运算符
5 switch语句switch语句通用格式如下:switch(integer-expression){ case label1: statement(s) case label2: statement(s) ... default : statement(s)}执行到switch语句时,程序将跳到使用integer-expression的值标记的那一行。例如,如果integer-expression的值为4,则程序将执行标签为case 4的那一行。integer-expressio原创 2022-05-15 14:13:41 · 259 阅读 · 0 评论 -
C++ Primer 第五章 循环和关系表达式
类型别名C++为类型建立别名的方式有两种。一种是使用预处理器:#define BYTE char //预处理器会用char来替代BYTE这样,预处理将在编译程序时使用char替换所有的BYTE,从而使BYTE成为char的别名。第二种方法是使用C++和C的关键字typedef来创建别名。例如,要将byte作为char的别名,可以这样做:typedef char byte; //使得byte是char的别名下面是通用格式:typedef typeName aliasName;换句话说,如原创 2022-05-08 20:26:29 · 474 阅读 · 0 评论 -
c++ makefile和cmake
makefile指在目录下叫做Makefile的文件,由make工具进行解释执行。在文件的编译过程中,首先将源代码编译生成中间文件.o,这个阶段只检测语法,如果源文件较多,那么Object File也会较多,此时将这些Object File链接合成一个执行文件的过程会变得比较繁琐。为了提高编译速度,需要对没有编译过的或者更新了的源文件进行编译,其他的直接链接中间目标文件。当头文件更改了时,我们还需要重新编译引用了更改过的头文件的文件。上面所说的通过make命令和我们编写的makefile就可以完成。简单原创 2022-04-27 01:46:35 · 482 阅读 · 0 评论 -
8 cpp函数详解
1 C++内联函数内联函数是C++为提高程序运行速度所做的一项改进。 常规函数和内联函数之间的主要区别不在于编写方式,而在于C++编译器如何将它们组合到程序中。编译过程的最终产品是可执行程序——由一组机器语言指令组成。运行程序时,操作系统将这些指令载入到计算机内存中,因此每条指令都有特定的内存地址。计算机随后将逐步执行这些指令。有时(如有循环或分支语句时),将跳过一些指令,向前或向后跳到特定地址。常规函数调用也使程序跳到另一个地址(函数的地址),并在函数结束时返回。下面更详细地介绍这一过程的典型实现。执原创 2022-04-12 13:32:11 · 368 阅读 · 0 评论 -
9 Memory Models and Namespaces(命名空间)
2 存储持续性、作用域和链接性C++使用三种(在C++11中是四种)不同的方案来存储数据,这些方案的区别就在于数据保留在内存中的时间。自动存储持续性:在函数定义中声明的变量(包括函数参数)的存储持续性为自动的。它们在程序开始执行其所属的函数或代码块时被创建,在执行完函数或代码块时,它们使用的内存被释放。C++有两种存储持续性为自动的变量。静态存储持续性:在函数定义外定义的变量和使用关键字static 定义的变量的存储持续性都为静态。它们在程序整个运行过程中都存在。C++有3种存储持续性为静态的变量。原创 2022-04-12 01:34:17 · 654 阅读 · 0 评论 -
3 处理数据
1 简单变量待补充 541.9 bool类型在计算中,布尔变量的类型可以是true或false。C++将非零值解释为true,将零解释为false。字面值true和false都可以通过提升转换为int类型,true被转换为1,而false被转换为0:int ans=true; //ans assigned 1int promise=false; //promise assigned 0另外,任何数字值或指针值都可以被隐式转换(即不用显式强制转换)为bool值。任何非零值都被转换为true,而原创 2022-04-09 21:36:58 · 557 阅读 · 0 评论 -
4 复合类型
10 数组的替代品10.1 模板类vector模板类vector类似于string类,也是一种动态数组。我们可以在运行阶段设置vector对象的长度,可在末尾附加新数据,还可在中间插入新数据。基本上,它是使用new创建动态数组的替代品。实际上,vector类确实使用new和delete来管理内存,但这种工作是自动完成的。首先,要使用vector对象,必须包含头文件vector。其次,vector包含在名称空间std中,因此我们可以使用using编译指令、using声明或std::vector。第三,模原创 2022-04-08 14:42:49 · 212 阅读 · 0 评论 -
C++类继承
1 一个简单的基类从一个类派生出另一个类时,原始类称为基类,继承类称为派生类。为说明继承,首先需要一个基类。3 多态公有继承RatedPlayer继承示例很简单。派生类对象使用基类的方法,而未做任何修改。然而,可能会遇到这样的情况,即希望同一个方法在派生类和基类中的行为是不同的。换句话来说,方法的行为应取决于调用该方法的对象。这种较复杂的行为称为多态——具有多种形态,即同一个方法的行为随上下文而异。有两种重要的机制可用于实现多态公有继承:在派生类中重新定义基类的方法。使用虚方法。现..原创 2022-04-07 10:40:28 · 722 阅读 · 0 评论 -
10 C++对象和类
3 类的构造函数和析构函数C++的目标之一是让使用类对象就像使用标准类型一样,但是常规的初始化语法不适用于类型Stock:不能像上面这样初始化Stock对象的原因在于,数据部分的访问状态是私有的,这意味着程序不能直接访问数据成员。程序只能通过成员函数来访问数据成员,因此需要设计合适的成员函数,才能成功地将对象初始化(如果使数据成员成为公有,而不是私有,就可以按刚才介绍的方法初始化类对象,但使数据成为公有的违背了类的一个主要初衷:数据隐藏)。一般来说,最好是在创建对象时对它进行初始化。例如:Stoc原创 2022-04-07 09:53:33 · 284 阅读 · 0 评论 -
7 函数——C++的编程模块
1 函数基本知识要使用C++函数,必须完成如下工作:提供函数定义提供函数原型调用函数如下例子用一个简单的示例演示了这三个步骤:#include<iostream>//函数原型void simple();int main(){ using namespace std; cout<<"main() will call the simple() function:\n"; //函数调用 simple(); cout<&原创 2022-04-04 12:52:13 · 1127 阅读 · 0 评论 -
附录G 标准模板库方法和函数
标准模板库(STL)旨在提供通用算法的高效实现,它通过通用函数(可用于满足特定算法要求的任何容器)和方法(可用于特定容器实例)来表达这些算法。1 STL和C++11C++11对C++语言做了大量修改,C++11给STL新增了多个元素。首先,它新增了多个容器;其次,给旧容器新增了多项功能;第三,在算法系列中新增了一些模板函数。1.1 新增的容器C++11新增了如下容器:array、forward_list、unordered_st以及无序关联容器unordered_multiset、unordered原创 2022-04-02 20:38:50 · 892 阅读 · 0 评论 -
16 string类和标准模板库
3 标准模板库STL提供了一组表示容器、迭代器、函数对象和算法的模板。容器是一个与数组类似的单元,可以存储若干个值。STL容器是同质的,即存储的值的类型相同;算法是完成特定任务(如对数组进行排序或再链表中查找特定值)的处方;迭代器能够用来遍历容器的对象,与能够遍历数组的指针类似,是广义指针;函数对象是类似于函数的对象,可以是类对象或函数指针(包括函数名,因为函数名被用作指针)。STL使得能够构造各种容器(包括数组、队列和链表)和执行各种操作(包括搜索、排序和随机排列)。STL不是面向对象的编程,而是一种原创 2022-04-02 20:26:02 · 696 阅读 · 0 评论 -
cpp Namespaces(命名空间)
命名空间提供了一种在大型项目中防止名称冲突的方法。在命名空间块(namespace block)中声明的符号被放置在一个命名作用域中,这个域可以防止它们在其他作用域中被误认为具有相同名称的符号。我们可以定义具有相同名称的多个命名空间块。这些块中的所有声明都在命名范围中声明。使用语法//1namespace ns_name { declarations }//2inline namespace ns_name { declarations }//3namespace { declarat原创 2021-03-14 21:44:49 · 562 阅读 · 0 评论 -
cpp作用域
出现在C++程序中的每个名称仅在源代码的某个可能不连续的部分中有效,称为其作用域。Within a scope, unqualified name lookup can be used to associate the name with its declaration.块作用域(block scope)由块中的声明(复合语句)引入的变量的潜在作用域从声明点开始,到块的末尾结束。实际作用域与潜在作用域相同,除非有一个嵌套块的声明引入了相同的名称(在这种情况下,嵌套声明的整个潜在作用域被排除在外部声明的原创 2021-03-07 11:11:03 · 425 阅读 · 0 评论 -
cpp存储类型说明符(storage class specifier)
The storage class specifiers are a part of the decl-specifier-seq of a name’s declaration syntax. Together with the scope of the name, they control two independent properties of the name: its storage duration and its linkage.存储类型说明符有以下几类:auto:register:原创 2021-03-07 10:17:19 · 947 阅读 · 0 评论 -
c++各种常用库
cmath:开根号:#include<iostream>#include<cmath>using namespace std;int main(){ double x=8; cout<<pow(x,1.0/3)<<endl; return 0;}输出:2 反三角函数:arcsin用asinarccos用acos...原创 2020-05-05 13:19:35 · 2281 阅读 · 0 评论 -
c++运算符
&:按位与参加运算的两个数据,按二进制位进行“与”运算。常用用法:数据与1进行按位与,判断数字是否为奇数>>:逻辑右移对于有符号数来说,右移时会保持符号位不变,例如假设int i=0x80000000,右移一位后i会变为0xc0000000,而不是0x40000000,符号位右移后,正数补0,负数补1.当移动的位数超过类型的长度时,会取余数,然后移动余数个数,比如假设...原创 2020-05-02 20:55:00 · 174 阅读 · 0 评论 -
c++数据结构
string类:字符串拼接:string类型的字符串可以通过"+“进行拼接,同时char类和string类也可以通过”+"进行连接。#include<iostream>using namespace std;int main(){ string x="hello"; string y="world"; char z='!'; cout<<x+y+z&l...原创 2020-04-18 16:04:12 · 430 阅读 · 0 评论 -
c++基础知识
C++堆栈:地址增长方式:地址增长方式是指堆或栈在分配内存的时候,其分得的内存地址的空间的增长方式,堆的增长方式是从低到高的,而栈的增长方式是从高到低的(注意这里默认是x86系统,不同架构的系统在这个方面有区别)。栈:在函数中生命的任何局部变量(非静态)都是在栈中分配的(编译期间完成)。并且函数的参数,以及返回值也依赖于栈。...原创 2020-04-18 08:46:13 · 647 阅读 · 0 评论 -
c++常用函数
memset():函数原型:memset(void *s, int ch, size_t n)函数作用:将所指向的某一块内存中的前n个字节的内容全部设置为ch指定的ASCⅡ值,第一个值为指定的内存块,块的大小由第三个参数指定,这个函数通常为申请新的内存做初始化工作,其返回值为指向s的指针,所在的头文件为<memory.h>或<string.h>参数说明:ch:这个值...原创 2020-04-10 17:08:16 · 186 阅读 · 0 评论 -
c++运算符
三目运算符:格式如下:x ? y : z含义是执行x的内容,如果x为真那么执行y的内容,否则执行z的内容原创 2020-04-02 10:12:11 · 254 阅读 · 0 评论 -
c++ string字符串翻转
使用algorithm中的reverse函数#include<iostream>#include<algorithm> using namespace std;int main(){ string x="abcdef"; reverse(x.begin(),x.end()); string y="fedcba"; int z=(x==y); cout&...原创 2020-03-19 10:25:02 · 3259 阅读 · 1 评论 -
c++string类寻找子串
c++中string类中包括了寻找子串的方法find用法例子:string a,b;cin>>a;cin>>b;int pos=a.find(b);//假定a=abcd,b=bc,返回结果pos=1原创 2019-04-23 10:33:37 · 20554 阅读 · 6 评论 -
c++ vector
1.`vector&amp;amp;lt;int&amp;amp;gt; list1;`这是默认初始化,vector为空,size为0,表明容器中没有元素,而且capacity也返回0,意味着还没有分配内存空间。这种初始化方法适用于元素个数未知,需要在程序中动态添加的情况 2.`vector&amp;amp;lt;int&amp;amp;gt; list2(list)` vector&原创 2018-07-30 11:36:33 · 884 阅读 · 0 评论