
C++
文章平均质量分 72
乌鸦_在飞
这个作者很懒,什么都没留下…
展开
-
C++程序编译执行具体步骤及各大系统中的编译命令
C++程序的编译执行步骤:1.首先是编写程序的源代码,保存在一个文件中,该文件的后缀名应为cpp,cxx,.C等(该C是大写,小写c代表是c程序,根据C++的版本不同而有一些差异,但基本都识别cpp)。该文件就是程序的源代码文件。2.编译源代码,生成目标代码文件。编译源代码用到编译器,如g++和clang。生成的目标代码文件的后缀名是 .o 。目标代码文件里的内容是机器语言。3.链原创 2017-10-28 20:31:40 · 2323 阅读 · 0 评论 -
类里定义常量和枚举
作用域为类的常量如果要在类里定义常量#include#includeusing namespace std;class NODE{private: int val; const int p = 1;};int main(){ return 0;}这样是编译会报错(在C++11中是可允许的,但早期的版本不支持)。因为类声明只是描述了对象的形式,并没有创建对象原创 2017-12-09 11:56:49 · 1332 阅读 · 0 评论 -
运算符重载
C++可以通过运算符重载来完成用户定义类型的运算。具体语法就是把函数名换成operator@,其中@代表特定的运算符。#include#includeusing namespace std;class NODE{private: int x, y;public: NODE(int _x = 0, int _y = 0) { x = _x; y = _y; }原创 2017-12-10 12:10:22 · 246 阅读 · 0 评论 -
C++指针和const
指针指向的值为常量 int a = 1; const int *p = &a; //指针p指向的值为常量,不能通过指针p来修改值 *p = 2; //这是错误的 a = 2; //a本身为普通变量,这是允许的值得一提的是,非const变量的地址可以同时赋给const指针和非const指针,而const变量的地址只能赋给const指针不能赋给非const指针。 int a原创 2017-11-23 08:48:09 · 218 阅读 · 0 评论 -
内联函数
浅谈程序内部编译的最终产品是可执行程序,由一堆机器指令组成。运行程序时,操作系统将这些机器指定载入内存,每条指令都有自己的地址,随后操作系统逐步执行这些指令。执行遇到分支或者循环等其他条件时,将会跳到特定指令地址处。常规函数调用也是使程序跳到特定的指令处(被调用函数的首地址),并在函数结束时返回。更详细的过程是,遇到函数调用指令时,程序在函数调用后,立即存下当前指令地址,如果还需要传参数,则参原创 2017-11-25 11:40:44 · 314 阅读 · 0 评论 -
名称空间
传统的C++名称空间先说以下三个基本概念:声明区域,潜在作用域,作用域。声明区域:即变量可以声明的区域。如全局变量的声明区域就是全局的,代码块里的变量的声明区域就是该代码块。潜在作用域:在该变量的声明区域中,从该变量声明的位置起,到声明区域结束,都是该变量的潜在作用域。作用域:变量并非在起潜在作用域的所有地方都可见,比如会被另一个被嵌套的代码块中的同名变量给覆盖掉。因此,变量可见的原创 2017-12-05 11:54:26 · 249 阅读 · 0 评论 -
变量的存储持续性,作用域和链接性
存储持续性存储持续性分为自动存储持续性,静态存储持续性,动态存储持续性。自动存储持续性:在函数中或者代码块中定义的变量的存储持续性是自动的。执行函数或代码块时,变量被创建,执行完之后,该变量使用的内存被释放。静态存储持续性:在函数外定义的或者用static关键字定义的变量的存储持续性是静态的。它在整个程序运行过程中都存在。动态存储持续性:用new分配的内存,直到用delete才会被原创 2017-12-03 21:11:53 · 366 阅读 · 0 评论 -
引用类型
创建引用变量引用是C++新增的特性,它能实现在函数调用指针能实现的功能,即通过修改参数的值从而修改实参的值。创建引用的语句: int a = 1; int &b = a;&在这里不是取地址的意思,而是类型标识符的一部分。表示变量b是一个引用。这样声明的结果是a和b指向相同的内存单元,即b是a的别名。两者完全等效。另外,引用变量必须初始化。 int a = 1; int &b =原创 2017-11-28 09:40:47 · 195 阅读 · 0 评论 -
C++随机数
头文件cstdlib中包含了rand()和srand()的原型。而ctime包含了time()的原型。rand()函数返回从0到某个数的随机数。如果将它模一个数,即rand()%x,得到的是从0到x-1的随机数。这种方法得到是伪随机数,因为在其内部的算法作为seed(种子)的数总是不变的,因此每次运行程序得到的随机数序列都相同。x=rand()%360;srand()函数提供设置种子的原创 2017-12-18 20:15:22 · 385 阅读 · 0 评论 -
C++类的三种继承
各种继承方式 公有继承 保护继承私有继承公有成员变成派生类的公有成员派生类的保护成员派生类的私有成员保护成员变成派生类的保护成员派生类的保护成员派生类的私有成员私有成员变成还是基类的私有成语,只能通过基类接口访问还是基类的私有成语,只能通过基类接口访问还是基类的私有成语,只能通过基类接口访问原创 2018-02-01 16:03:22 · 279 阅读 · 0 评论 -
C++异常
调用abort()调用abort()将使程序异常终止。因此可以在程序中添加异常测试代码,如果检测到了异常,就调用abort()使程序终止。以下这个例子是输入a和b,输出a/b的结果。在函数中检测除数是0的情况,如果除数是0,代表异常。#include#includeusing namespace std;const double esp = 1e-20;double myDi原创 2018-02-03 16:51:31 · 380 阅读 · 0 评论 -
C++智能指针
对于常规指针,如果指向的是动态分配的内存,则必须要记得使用delete。智能指针模板类正是用来解决这个问题的,解决程序员”不记得“的毛病。智能指针是行为类似于常规指针的类对象。既然是类对象,就会有析构函数,智能指针的析构函数就是执行了delete操作。所以一当智能指针无效时,会自动调用它的析构函数,把它指向的内存也一并释放掉。这里介绍三个智能指针模板类:(1)auto_ptr。(2)unique_原创 2018-02-04 16:10:45 · 589 阅读 · 0 评论 -
C++类的自动转换和强制类型转换
通过构造函数来转换如果有这样的构造函数:Node(int _x);则可以有这样的语句:Node a=2;这条语句实际上将使用2作为构造函数的参数创建临时变量,然后将该变量复制到a中,由于这一步是自动进行的,所以称为隐式转换。注意只有一个参数的构造函数(或者有多个参数,但除了第一个,其他的参数都有默认值)才能用来转换。可以用于隐式转换的情况(前提是有满足条件的构造函数):原创 2017-12-18 21:10:57 · 538 阅读 · 0 评论 -
C++输入输出迭代器
C++输入输出可以使用cin,cout,也可以使用C语言的scanf和printf。这里介绍使用输入输出迭代器进行输入输出。迭代器迭代器代表广义指针,可以完成常规指针的所有操作。C++的STL定义了5中迭代器:(1)输入迭代器。(2)输出迭代器。(3)正向迭代器。(4)双向迭代器。(5)随机访问迭代器。这些包含在头文件iterator中。输入迭代器输入迭代器指向某个输入流,因此可以原创 2018-02-06 14:36:22 · 2848 阅读 · 0 评论 -
select()函数用法
select()函数是实现服用服务器端的一种方法。这里介绍Linux环境下select()函数的用法,Windows下的大同小异。select函数的功能select函数可以同时监视多个文件描述符,并且可以监视三种事件。一旦某个文件描述符所指的对象发生了相应事件,就可以进行相应的处理。监视的三种事件:(1)是否有对象需要接受数据。(2)是否有对象需要传输数据。(3)是否有对象发生了异常。select...原创 2018-03-20 11:51:15 · 3470 阅读 · 0 评论 -
函数模板
#include#includeusing namespace std;templateT add(T a, T b);int main(){ int a, b; cin >> a >> b; double c, d; cin >> c >> d; cout << add(a, b) << endl; //根据实参的具体类型创建相应的函数 cout << add(原创 2017-11-30 20:00:47 · 260 阅读 · 0 评论 -
C++函数原型
函数原型即在调用某个函数前,需事先声明的一条语句,它和函数定义的头部一致,参数变量名可以省略。首先说一下C++函数是如何返回值的。通常,函数通过将返回值复制到指定的cpu寄存器或内存单元中。然后调用程序或调用函数(是指调用了该函数的函数)将查看该内存单元。函数原型将返回值类型告知调用程序,而函数定义确定具体返回值的类型,显然这两者应该保持一致。为什么需要原型原型描述了函数到编译器的接口原创 2017-11-21 11:24:19 · 1145 阅读 · 0 评论 -
浅谈C++的main和库文件头文件,名称空间
main函数:每个C++程序都必须要有个main函数(有些情况下可以没有,如一些不是独立的程序)。程序是从main函数开始执行。一般自定义的函数,都会被另一个函数调用。那么main函数是被谁调用呢。我们可以认为是被操作系统调用。准确的说是被标准的启动代码调用。在上一篇文章中说到程序的编译链接。链接实际上是将程序的目标代码和被用到的函数的目标代码加上标准的启动代码链接起来。因此main函数可以被原创 2017-10-29 10:46:27 · 2576 阅读 · 0 评论 -
C++原始字符串raw
原始(raw)字符串:C++11新增的另一种类型是原始字符串raw。原始字符串中的字符表示的就是自己。例如"\n"表示的不是换行符,而是两个字符:斜杠和n。因此在屏幕上显示时,将显示的是\n这两个字符。另外,在字符串中使用"时候,不需要使用转义,即\",而是直接使用。因此原始字符串就不能用""来限定开头和末尾,而是用"(和)"用作定界符,并使用前缀R来标识原始字符串。cout上述代码将原创 2017-11-07 11:37:38 · 6512 阅读 · 2 评论 -
C++结构中的位字段和共用体
C++结构中的位字段:与c语言一样,C++也允许指定占用特定位数的结构成员。这使得创建与某个硬件设备上的寄存器对应的数据结构非常方便。字段的类型应为整型或者枚举,接下来是冒号,冒号后面是一个数字,代表使用的位数。可以使用没有名称的字段来提供间距。每个成员都被称为位字段。 struct test { int sn:4; unsigned int原创 2017-11-07 12:02:02 · 1160 阅读 · 1 评论 -
C++指针变量的简单运算
指针变量+1和-1:指针变量加1后,其增加的值是该指针所指向的数据类型的字节数。 int a; int *p=&a; cout输出的结果是:0x61ff180x61ff1c因为int的字节是4。不一定是这两个值,但它们的差应该都是4。数组名也是如此。可以修改指针变量的值,不能修改数组名,因为数组名是常量。数组地址:数组名代表数组的首地址,即第一原创 2017-11-07 19:27:45 · 691 阅读 · 1 评论 -
编写延时循环
编写延时循环有时候运行程序时,屏幕上显示了输出内容,但当我们还来不及阅读时,程序便输出了其他内容,导致无法正确捕获信息。编写延时循环的目的主要是按程序员的意图在程序的执行过程中可以暂停一会儿,以便得到想要的信息。ANSI C和C++库中有一个函数有助于完成这样的工作。函数名为clock()。返回程序开始执行后所用的系统时间。clock()返回时间的单位不一定是秒。在不同系统中,返回的类型也原创 2017-11-12 10:40:10 · 871 阅读 · 0 评论 -
文件尾条件
文件尾条件在文本在输入时,当遇到文件尾(EOF),程序会停止输入。很多操作系统都允许通过键盘来模拟文件尾条件。在linux中通常是按下Ctrl+Z来模拟文件尾,在windows下一般是Ctrl+Z和Enter。有些C++实现支持类似的行为,及时底层操作系统不支持。如果编程环境能够检测EOF,则可以使用键盘输入,并在键盘输入中模拟EOF。检测到EOF后,cin将两个位(eofbit和fail原创 2017-11-13 17:39:39 · 1072 阅读 · 0 评论 -
字符函数库cctype
字符函数库cctype该函数库里包含了一些与字符相关的,非常方便的一些函数,可以简化程序员的工作。例如,当判断一个字符是否是字母时,以下两条语句是等价的,其中第二条语句用到了字符函数库里的函数。#includeusing namespace std;int main(){ char ch; cin>>ch; if(ch>='a'&&ch='A'&&ch原创 2017-11-14 11:17:09 · 270 阅读 · 0 评论 -
cin读取数字时遇到字符的情况
cin读取数字时遇到字符当定义一个int变量,用cin输入时,如果输入的是一个字符,会发生以下4中情况:1.n的值变成02.不匹配的输入被留在输入流中3.cin对象的一个错误标记被设置,即cin.fail()返回true4.对cin的方法调用返回false,即(cin>>n)返回的是false#includeusing namespace std;int main()原创 2017-11-14 12:11:36 · 7148 阅读 · 4 评论 -
字符串类型wchar_t
在介绍wchar_t前,先简单说明一下基本字符集和扩展字符集。基本字符集:C++实现支持的基本字符集,其中包括有基本的源字符集和基本的执行字符集。基本的源字符集表示的是可用来编写源代码的字符集,由常用字符的大小写,数字和C语言中使用的符号以及其他一些字符组成。基本的执行字符集,它包括在程序执行期间可处理的字符(如可从文件中读取或显示到屏幕上的字符)。它还增加了一些字符,如退格和振铃。原创 2017-11-06 13:35:40 · 1589 阅读 · 0 评论 -
面向行的输入:getline()和get()
getline():getline()函数读取整行,它使用通过回车键输入的换行符来确定输入结尾。调用方法为cin.getline()。该函数有两个参数。第一个参数是数组名,第二个参数是要读取的字符数。例如第二个参数为n,则函数最多读取n-1个字符,因为至少要保留一个空间存空字符,即'\0'。getline()成员函数在读取指定数目的字符或遇到换行符时停止读取。当遇到换行符时,它也会从输入流中读原创 2017-11-06 17:20:47 · 450 阅读 · 0 评论 -
C++简单文件输入输出
简单文件输入输出使用文件输入输出需要包括头文件fstream。该头文件里有用于处理输入的类ifstream和输出的类ofstream。以下给个例子:#include#includeusing namespace std;int main(){ ifstream in; //in可以用cin的所有方法 ofstream out; //out可以用cout的所有方原创 2017-11-15 19:42:30 · 452 阅读 · 0 评论 -
Linux下多线程服务器端的实现
Linux下多线程编程时,编译命令需要加上-lpthread选项。g++ test.cpp -o test -lpthread线程的创建线程具有单独的执行流,所以会有自己的main函数。创建线程的函数如下:int pthread_create(pthread_t * restrict thread,const thread_attr_t * restrict attr,void *(* start...原创 2018-03-27 15:00:36 · 431 阅读 · 1 评论