C++基础教程
文章平均质量分 70
精心安排每一章的学习内容,而且每一章都会有学习目标和总结,从最基础的开始学起,即适合初学者也适合想要深入研究的读者们
青木落
努力学习的小菜鸟,希望三年后收获不一样的自己
展开
-
47-C++非表达式和语句
有些概念对于理解C++至关重要,如了解for循环的结构。不过句法中也有一些相对次要的内容,让认为自己理解语言的人突然觉得不知所措。下面来看看这样的内容。 对任何表达式加上分号都可以成为语句,但是这句话反过来说就不对了。也就是说,从语法中删除分号,并不一定将它转换为表达式。就我们目前使用的语言而言,返回语句、声明语句和for语句都不满足“语句 = 表达式+分号”这种模式。例如,下面...原创 2018-09-06 22:21:21 · 816 阅读 · 0 评论 -
46-C++表达式和语句
表达式和语句for语句的控制部分使用3个表达式。由于其自身加强的句法限制,C++成为非常具有表现力的语言,任何值或任何有效的值和运算符的组合都是表达式。例如,10是值为10的表达式(一点都不奇怪),28*20是值为560的表达式。在C++中,每个表达式都有值。通常值是很明显的。例如,下面的表达式由两个值和一个加号组成,它的值为49; 22+27有时值不那么明显,例如,下面是一个表达式,...原创 2018-09-04 14:32:25 · 513 阅读 · 0 评论 -
45.C++for循环的组成部分
5.1.1 for循环的组成部分for循环为执行重复的操作提供了循序渐进的步骤。我们来具体看一看它是如何工作的。for循环的组成部分完成下面这些步骤。设置初始值 执行测试,看看循环是否应当继续进行。 执行循环操作 更新用于测试的值 C++循环设计中包括了这些要素,很容易识别。初始化、测试和更新操作构成了控...原创 2018-09-04 14:22:15 · 631 阅读 · 0 评论 -
44-C++-for循环
第5章 循环和关系表达式本章内容包括:l for循环l 表达式和语句l 递增运算符和递减运算符: ++和--l 组合赋值运算符l 复合语句(语句块)l 逗号运算符l 关系运算符:>、>=、==、<=、<和!=l while循环l typedef工具l do while 循环l 字符输入方法get()l 文件尾条件l 嵌套循环和二维数组计算机除了存储数据外,还可以做很多其他的...原创 2018-06-24 16:19:10 · 330 阅读 · 0 评论 -
43-C++数组的替代品vector和array
4.10 数组的替代品本章前面说过,模板类vector和array是数组的替代品。下面简要地介绍它们的用法以及使用它们带来的一些好处。4.10.1 模板类vector模板类vector类似于string类,也是一种动态数组,您可以在运行阶段设置vector对象的长度,可在末尾附加新数据,还可在中间插入新数据。基本上,它是使用new创建动态数组的替代品。实际上,vector类确实使用new和dele...原创 2018-06-16 09:37:57 · 993 阅读 · 0 评论 -
42-C++-类型组合
4.9 类型组合本章介绍了数组、结构和指针。可以各种方式组合它们,下面介绍其中的一些,从结构开始:struct antarctica_years_end{int years;};可以创建这种类型的变量:antarctica_years_end s01,s02,s03;然后使用成员运算符访问其成员:s01.year = 1998;可创建指向这种结构的指针:antarctica_years_end *...原创 2018-06-16 09:24:22 · 561 阅读 · 0 评论 -
41-C++自动存储、静态存储和动态存储
4.8.5 自动存储、静态存储和动态存储根据用于分配内存的方法,C++有3种管理数据内存的方式:自动存储、静态存储和动态存储(有时也叫做自由存储空间或堆)。在存在时间的长短方面,以这3种方式分配的数据对象各不相同。下面简要地介绍每种类型(C++11新增了第四种类型——线程存储,这将在第9章简要地讨论)。1. 自动存储在函数内部定义的常规变量使用自动存储空间,被称为自动变量,这意味着它们在所属的函数...原创 2018-06-15 22:43:20 · 546 阅读 · 0 评论 -
40-C++-使用new创建动态结构
4.8.4使用new创建动态结构 在运行时创建数组优于在编译时创建数组,对于结构也是如此。需要在程序运行时为结构分配所需的空间,这也可以使用new运算符来完成。通过使用new,可以创建动态结构。同样,“动态”意味着内存是在运行时,而不是编译时分配的。由于类与结构非常相似,因此木节介绍的有关结构的技术也适用于类。 将new用于结构由两步组成:创建结构和访问其成员。要创建结构,需要同时使用结构类型和n...原创 2018-06-15 22:42:33 · 9088 阅读 · 2 评论 -
39-C++-指针与字符串
4.8.3 指针和字符串数组和指针的特殊关系可以扩展到C-风格字符串。请看下面的代码:char flower[10] = “rose”;cout<< flower << “s are red\n”;数组名是第一个元素的地址,因此cout语句中的flower是包含字符r的char元素的地址。cout对象认为char的地址是字符串的地址,因此它打印该地址处的字符,然后继续打印后...原创 2018-06-15 22:39:28 · 1911 阅读 · 2 评论 -
38-c++-指针小结
4.8 指针、数组和指针算术指针和数组基本等价的原因在于指针算术和C++内部处理数组的方式。首先,我们来看一看算术。将整数变量加1后,其值将增加1;但将指针变量加1后,增加的量等于它指向的类型的字节数。将指向double的指针加1后,如果系统对double使用8个字节存储,则数组将增加8;将指向short的指针加1后,如果系统对short使用2个字节存储,则指针值将增加2。程序4.19演示了这种令...原创 2018-06-15 22:36:13 · 341 阅读 · 0 评论 -
37-C++-指针和自由存储空间
4.7 指针和自由存储空间在第3章的开头,提到了计算机程序在存储数据时必须跟踪的3种基本属性。为了方便,这里再次列出了这些属性:l 信息存储在何处;l 存储的值为多少;l 存储的信息是什么类型。您使用过一种策略来达到上述目的:定义一个简单变量。声明语句指出了值的类型和符号名,还让程序为值分配内存,并在内部跟踪该内存单元。下面来看一看另一种策略,它在开发C++类时非常重要。这种策略以指针为基础,指针...原创 2018-06-13 11:50:54 · 342 阅读 · 0 评论 -
36-C++-枚举
4.6 枚举C++的enum工具提供了另一种创建符号常量的方式,这种方式可以代替const。它还允许定义新类型,但必须按严格的限制执行。使用enum的句法与使用结构相似。例如,请看下面的语句:enum spectrum {red、orange、yellow、green、blue、violet、indigo、ultraviolet};这种语句完成两项工作。l 让spectrum成为新类型的名称:sp...原创 2018-06-09 21:52:33 · 247 阅读 · 0 评论 -
35-C++-共用体
4.5 共用体共用体是一种数据格式,它能够存储不同的数据类型,但只能同时存储其中的一种类型。也就是说,结构可以同时存储int、long和double,共用体只能存储int、long或double。共用体的句法与结构相似,但含义不同。例如,请看下面的声明:union one4all{int int_val;long long_val;double double_val;};可以使用one4all变量...原创 2018-06-09 17:32:48 · 292 阅读 · 0 评论 -
34-C++-结构简介
4.4结构简介假设要存储有关篮球运动员的信息,则可能需要存储他(她)的姓名、工资、身高、体重、平均得分、命中率、助攻次数等。希望有一种数据格式可以将所有这些信息存储在一个单元中。数组不能完成这项任务,因为虽然数组可以存储多个元素,但所有元素的类型必须相同。也就是说,一个数组可以存储20个int,另一个数组可以存储10个float,但同一个数组不能在一些元素中存储int,在另一些元素中存储float...原创 2018-06-09 17:30:43 · 526 阅读 · 0 评论 -
33-C++基础string类介绍
4.3 string类介绍ISO/ANSI C++98标准通过添加string类扩展了C++库,因此现在可以string类型的变量(使用C++的说话是对象)而不是字符数组来存储字符串。您将看到,string类使用起来比数组简单,同时提供了将字符串作为一种数据类型的表示方法。要使用string类,必须在程序中包含头文件string。string类位于名称空间std中,因此您必须提供一条using编译...原创 2018-06-03 10:35:45 · 865 阅读 · 0 评论 -
32-C++基础-混合输入字符串和数字
4.2.5 混合输入字符串和数字混合输入数字和面向行的字符串会导致问题。请看程序4.6中的简单程序。清单4.6 numstr.cpp该程序的运行情况如下:用户根本没有输入地址的机会。问题在于,当cin读取年份,将回车键生成的换行符留在了输入队列中。后面的cin.getline()看到换行符后,将认为是一个空行,并将一个空字符串赋给address数组。解决之道是,在读取地址之前先读取并丢弃换...原创 2018-06-03 10:35:31 · 5693 阅读 · 0 评论 -
31-C++基础-每次读取一行字符串输入
4.2.4 每次读取一行字符串输入每次读取一个单词通常不是最好的选择,例如,假设程序要求用户输入城市名,用户输入New York或Sao Paulo,您希程序读取并存储完整的城市名,而不仅仅是New或Sao.要将整条短语而不是个词作为字符串输入,需要采用另一种字符串读取方法。具体地说,需要采用面向行而不是面向单词的方法,幸运的是,istream 中的类(如cin)提供了些面向行的类成员函数: ...原创 2018-06-03 10:35:06 · 3581 阅读 · 1 评论 -
30-C++基础-字符串输入
4.2.3 字符串输入程序string.cpp有一个缺陷,这种缺陷通过精心选择输入被遮盖掉了。程序4.3揭开了他的面纱,揭示了字符串输入的技巧程序4.3 instr1.cpp该程序的意图很简单:读取来自键盘的用户名和用户喜欢的甜点,然后显示这些信息。下面是该程序的运行情况:我们甚至还没有对“输入甜点的提示”作出反应,程序便把它显示出来了,然后立即显示最后一行,cin是如何确定已完成字符串输入...原创 2018-06-03 10:34:46 · 339 阅读 · 0 评论 -
29-C++基础-在数组中使用字符串
4.2.2 在数组中使用字符串要将字符串存储到数组中,最常用的方法有两种——将数组初始化为字符串常量、将键盘或文件读入到数组中。程序4.2演示了这两种方法,它将一个数组初始化为用引号括起的字符串,并使用cin将一个输入字符串放到另一个数组中。该程序还使用了标准C语言库函数strlen()来确定字符串的长度。标准头文件cstring(老式实现为string.h)提供了该函数以及很多于字符串相关的其他...原创 2018-06-03 10:34:38 · 811 阅读 · 0 评论 -
28-C++-运算符优先级
补充内容:运算符优先级运算符优先级决定了运算符对于值的顺序。C++运算符分为18个优先级组,如下表所示。第一组的运算符的优先级就搞,第二组中运算符的优先级次之,以此类推。如果两个运算符被用于同一个操作数,则首先应用优先级搞得运算符。如果两个运算符的优先级相同,则C++使用结合性规则来决定哪个运算符结合得更为紧密。同一组中运算符的优先级和结合性相同。不管是从左到右还是从右到左结合,从左到右的结合性意...原创 2018-06-03 10:34:15 · 5176 阅读 · 0 评论 -
27-C++基础-拼接字符串常量
4.2.1 拼接字符串常量有时候,字符串很长,无法放到一行中。C++允许拼接字符串字面值,即将两个用引号括起的字符串合并为一个。事实上,任何两个由空白(空格、制表符和换行符)分隔的字符串常量都将自动拼接成一个。因此,下面所有的输出语句都是等效的:cout<<”I’d give my right arm to be” “ a great violinist.\n”;cout<<...原创 2018-06-02 00:06:22 · 2432 阅读 · 0 评论 -
26-C++基础-字符串
4.2字符串 字符串是存储在内存的连续字节中的一系列字符。C++处理字符串中的方式有两种。第一种来自C语言,常被称为C-风格字符串。本章将首先介绍它,然后介绍另一中基于string类库的方法。 存储在连续字节中的一系列字符意味着可以将字符串存储每个字char数组中,其中每个字符都位于自己的数组元素中。字符串提供了一种存储文本信息的便捷方式,如提供给用户的信息(“请告诉我您的瑞士银行账号”)或来自用...原创 2018-06-02 00:05:12 · 225 阅读 · 0 评论 -
25-C++基础-数组
第四章 复合类型本章内容包括:l 创建和使用数值。l 创建和使用C-风格字符串。l 创建和使用string类字符串l 使用方法getline()和get()读取字符串。l 混合输入字符串和数字。l 创建和使用结构。l 创建和使用共用体。l 创建和使用枚举。创建和使用指针。l 使用new和delete管理动态内存。l 创建动态数组。l 创建动态结构。l 自动存储、静态存储和动态存储。l vector...原创 2018-06-02 00:04:52 · 289 阅读 · 0 评论 -
24-C++类型转换
3.4.4 类型转换C++丰富的类型允许根据需求选择不同的类型,这也使计算机的操作更复杂。例如,将两个short值相加涉及到的硬件编译指令可能会与将两个long值相加不同。由于有11种整型和3种浮点类型,因此计算机需要处理大量不同的情况,尤其是对不同的类型进行计算时。为处理这种潜在的混乱,C++自动执行很多类型转换:l 将一种算术类型的值赋给另一种算术类型的变量时,C++对其值进行转换;l 表达式...原创 2018-06-02 00:04:28 · 2758 阅读 · 0 评论 -
23-C++-算术运算符
3.4 C++算术运算符大家可能还对学校里做的算数练习记忆犹新,在计算机上也能够获得同样的乐趣。C++使用算术运算符来运算。它提供了几种运算符来完成5中基本的算术运算:加法、减法、乘法、除法以及求模。每种运算符都使用两个值(操作数)来计算结果。运算符及其操作数构成了表达式。例如,在下面的语句中:int wheels = 4 + 2;4和2都是操作数,+是加法运算符,4+2则是一个表达式,其值为6...原创 2018-06-02 00:04:15 · 4899 阅读 · 0 评论 -
22-C++基础-浮点数
浮点数了解各种C++整型后,来看看浮点类型,它们是C++的第二组基本类型。浮点数能够表示带小数部分的数字,如MI油箱的汽油是里程数(0.56MPG),它们提供的值范围也更大,如果数字很大,无法表示为long类型,如人体的细菌数(估计超过100兆),则可以使用浮点类型来表示。使用浮点类型可以表示诸如2.5、3.14159和122442.32这样的数字,即带小数部分的数字。计算机将这样的值分成两部分...原创 2018-06-02 00:03:55 · 12111 阅读 · 1 评论 -
21-C++基础-const限定符
1、成员函数cout.put()cout.put()到底是什么东西?其名称中为何有一个句号?函数cout.put()是一个重要的C++OOP概念——成员函数——的第一个例子。类定义了如何表示和控制数据。成员函数归类所有,描述了操纵类数据的方法。例如类ostream有一个put()成员函数,用来输出字符。只能通过类的特定对象(例如这里的cout对象)来使用成员函数。要通过对象(如cout)使用成员函...原创 2018-06-02 00:03:24 · 375 阅读 · 0 评论 -
20-C++-bool类型
4、通用字符名c++实现支持一个基本的源字符集,即可以用来编写源代码的字符集。它由标准美国键盘上的字符(大写和小写)和数字、C语言中使用的符号(如{和=})以及其他一些字符(如换行符和空格)组成。还有一个基本的执行字符集,它包括在程序执行期间可处理的字符(可从文件中读取或显示到屏幕上的字符)。它增加了一些字符,如退格和振铃。C++标准还允许实现提供扩展源字集。另外,那些被作为字母的额外字符也可用于...原创 2018-06-02 00:03:10 · 4609 阅读 · 0 评论 -
19-C++基础-char类型:字符与小整数
2.1.8 char 类型:字符和小整数下面介绍最后一种整型:char类型。顾名思义,char类型是专门存储字符(如字母和数字)而设计的。现在,存储数字对于计算机来说算不了什么,但存储字母则是另一回事。编程语言通过使用字母的数值编码解决了这个问题。因此,char类型是另一种整型。它足够长,能够表示目标计算机系统中所有基本符号——所有字母、数字、标点符号等。实际上,很多系统支持的字符都不超过128个...原创 2018-06-02 00:01:05 · 8888 阅读 · 0 评论 -
18-C++基础-C++如何确定常量的类型
3.1.7 C++如何确定常量的类型程序的声明将特定的整型变量的类型告诉了C++编译器,但编译器如何知道常量的类型呢?假设在程序中使用常量表示一个数字:cout<<”Year = ”<<1492<<”\n”程序将把1492存储为int、long还是其他整型呢?答案是,除非有理由存储为其他类型(如使用特殊的后缀来表示特定的类型,或者值太大,不能存储为int),否则...原创 2018-06-02 00:00:24 · 1771 阅读 · 0 评论 -
17-C++基础-无符号类型、选择整型类型和整型字面值
3.1.4 无符号类型前面介绍的4中整型都有一种不能存储负数值的无符号变体,其优点是可以增大变量能够存储的最大值。例如,如果short表示的范围为-32768到+32767,则无符号版本的表示范围为0-65535。当然,仅当数值不会为负时才应使用无符号类型,如人口、粒数等。要创建无符号版本的基本整型,只需使用关键字unsigned来修改声明即可:unsigned short change;unsi...原创 2018-06-01 09:09:03 · 7913 阅读 · 0 评论 -
16-C++-基础-整型short、int、long和long long
3.1.2 整型整数就是没有小数部分的数字,如-2、98、-5286和0.整数有很多,如果将无限大的整数看作很大,则不可能用有限的计算机内存来表示所有的整数。因此,语言只能表示所有整数的一个子集。有些语言只提供一种整型(一种类型满足所有要求!),而C++则提供好几种,这样便能根据程序的具体要求选择最合适的整型。不同C++整型使用不同的内存量来存储整数。使用的内存量越大,可以表示的整数值范围...原创 2018-06-01 09:08:50 · 73676 阅读 · 2 评论 -
15- C++基础-变量名
第3章 处理数据本章内容包括:l C++变量的命名规则l C++内置整型——unsigned long、long、unsigned int、int、unsigned short、short、char、unsigned char、signed char和bool。l C++11新增的整型:unsigned long long 和long long。l 表示各种整型的系统限制的climits文件。l ...原创 2018-06-01 09:08:26 · 970 阅读 · 0 评论 -
14-C++基础-在多函数程序中使用using编译指令及总结
2.3.5 在多函数程序中使用using编译指令在程序2.5中,两个函数中都包含下面一条using编译指令:using namespace std;这是因为每个函数都使用了cout,因此需要能够访问位于名称空间std中的cout定义。在程序2.5中,可以采用另一种方法让两个函数都能够访问名称空间std,即将编译指令放在函数的外面,其位于两个函数的前面:[cpp] view plain copy ...原创 2018-06-01 09:07:59 · 654 阅读 · 0 评论 -
13-C++ 基础-用户定义的函数
2.4.3用户定义的函数标准C库提供了140多个预定义的函数,如果其中的函数能满足需求,则应使用它们。但用户经常需要编写自己的函数,尤其是在设计类的时候。无论如何,设计自己的函数很有意思,下面来介绍这一过程。前面已经使用过好几个用户定义的函数,它们都叫main()。每个C++程序都必须有一个main()函数,用户必须对它进行定义。假设需要添加另一个人用户定义的函数。和库函数一样,也可以通过函数名来...原创 2018-06-01 09:07:41 · 3438 阅读 · 0 评论 -
12-C++ 基础-使用有返回值的函数以及函数变体
2.4函数由于函数用于创建C++程序的模块,在C++的OOP定义至关重要,因此必须熟悉它。含火速的某些方面术语高级主题,将在第七章和第八章重点讨论函数。然而,现在了解函数的一些基本特性,将使得在以后的函数学习中更加得心应手。本章剩余的内容将介绍函数的一些基本知识。C++函数分两种:有返回值的和没有返回值的。在标准C++函数库中可以找到这两类函数的例子,您也可以自己创建这两种类型的函数。下面首先来看...原创 2018-06-01 09:07:11 · 4308 阅读 · 1 评论 -
11-C++ 基础-其他C++语句
2.3 其他C++语句再来看几个C++语句的例子。程序2.3中的程序对前一个程序进行了扩展,要求在程序运行时输入一个值。为了实现这项任务,它使用了cin,这是与cout对应的用于输入的对象。另外,该程序还演示了cout对象的多功能性。程序2.3 getinfo.cpp程序调整如果您发现在以前的程序中需要添加get.cin(),则在这个程序中,需要添加两条cin.get()语句,这样才能在屏幕上看...原创 2018-06-01 09:06:42 · 555 阅读 · 2 评论 -
10-C++ 基础 - C++语句
C++语句C++程序是一组函数,而每个函数又是一组语句。C++有好几种语句。下面介绍其中的一些。程序清单2.2.1提供了两种新的语句。声明语句创建变量,赋值语句给变量提供一个值。另外,该程序还演示了cout的新功能程序2.2.1 carrots.cpp 空行将声明语句与程序的其他部分分开。这是C常用的方法,但在C++中并不那么常见。下面是该程序的输出: 下面探讨这个程序2.2.1...原创 2018-06-01 09:06:17 · 3925 阅读 · 0 评论 -
09-C++基础-C++源代码的格式化
2.1.7 C++源代码的格式化 有些语言(如FORTRAN)是面向行,即每条语句占一行。对于这些语言来说,回车的作用是将语句分开。然而,在C++中,分号标示了语句的结尾。因此,在C++中,回车的作用就和空格或制表符相同。也就是说,在C++中,通常可以在能够使用回车的地方使用空格,反之亦然。这说明既可以把一条语句放在几行上,也可以把几条语句放在同一行上。例如,可以将myfirst.cpp重新...原创 2018-06-01 09:05:48 · 1155 阅读 · 0 评论 -
08-C++基础-使用cout进行C++输出
2.1.6 使用cout进行C++输出 现在来看一看如何显示信息。myfirst.cpp程序使用下面的C++语句: cout<<"Come up and C++ me some time."; 双括号括起的部分是要打印的消息。在C++中,用双引号括起的一系列字符叫做字符串,因为它是由若干字符组合而成的。<<符号表示该语句将把这个字符串发送给cout;该符...原创 2018-06-01 09:05:27 · 1593 阅读 · 0 评论