c++教程
文章平均质量分 69
希望真的能够写出可以让初学者入门c++的教程。By:程程之光 2021
「已注销」
他们说,你这个没用,不能赚钱,想赚钱会复制粘贴就行了。他们还说,像你这样从c++开始写的,就等着饿死吧!
展开
-
【c++教程】看完这篇,你就可以入门c++了
c++教程的目录索引,By:程程之光原创 2021-09-13 22:06:20 · 1470 阅读 · 1 评论 -
【c++教程】为迭代器使用const限定
对STL中的迭代器使用const限定的方法原创 2021-11-21 20:36:13 · 1016 阅读 · 0 评论 -
【c++教程】4.2-复合语句
复合语句写在花括号{}中的内容组成的语句,就是复合语句。特别的,如果你只写了一个花括号,里面什么内容都没有,这也是一种空语句,相当于只有一个分号。复合语句有三个主要特点:1,整个花括号中虽然可能包括了多条语句,但是算作一个复合语句。2,复合语句有自己的作用域,因此在离开复合语句以后,其中定义的变量会销毁。3,复合语句的结束不需要分号,当然也许从这是一个语句的角度来说,应该要写分号才对,但是不写分号可以算作是一种福利。也就是既然已经知道它在哪里结束了,就不用再额外写结束标志了。复合语句原创 2021-10-12 22:40:42 · 2674 阅读 · 0 评论 -
【c++教程】4.1-表达式语句
语句(statement)语句,也就是statement,是程序的一个基本的组成部分。相当于平常说的一句话,就是一个语句。在c++中,一般语句会以;作为结束。其中,最简单的一个语句,就是空语句,它的特点是没有表达式。也就是说,一个简单的分号就是一个空语句。空语句有的时候可以用来配合循环来使用。// 比如说,我们创建一个简单的无限循环while (true)// 这当然可以,但是,通常也会这样做for (;;)如果多用了一些空语句会怎么样呢?以我们最熟悉的第一个程序为例。#in原创 2021-10-11 23:34:27 · 437 阅读 · 0 评论 -
【c++教程】附录A-C++运算符优先级表
一个挺常见的c++运算符的优先级表,没什么特别的原创 2021-10-09 11:42:55 · 385 阅读 · 0 评论 -
【彩蛋】世事不可强求,愿快乐永存
C++运算符优先级表 等级 运算符 结合性 1 :: 作用域运算符 从左到右 2 a++ 后自增运算符 a-- 后自减运算符 a() 函数调用运算符 a[] 下标 . 成员访问 -> 指针成员访问 类型() 函数式强制类型转换 static_cast 类型转换运算符 dynamic_cast类型转换运算符 const_cast类型转换运算符 reinterpret_c..原创 2021-10-08 20:35:46 · 117 阅读 · 0 评论 -
【c++教程】3.13-运算符的优先级
什么是优先级在我们很早接触到数学运算的时候,我们就知道要先算乘除,再算加减。也就是运算是有先后顺序的,这就是优先级,在程序中也是一样的,运算符是具有优先级的。优先级的用途如果,你能够熟练掌握优先级的话,那么可以写出非常漂亮的程序。a == 1 and b == 2(a == 1) and (b == 2)比如说,如果你对优先级有所了解,那么很容易写出第一行这样的程序。但是如果你对优先级一无所知的话,那么可能写的程序就像是第二行,自然是没那么美观的。即使你记不住运算符的优先级.原创 2021-10-10 22:23:51 · 3709 阅读 · 0 评论 -
【c++教程】3.12-类型转换运算符
老式显式类型转换(类型)表达式 c风格的强制类型转换类型(表达式) 函数式的强制类型转换1,最开始使用的是c风格的类型转换,但是为了能够使类型转换看起来更像是一个函数调用,因此引入了函数式的类型转换。函数式的类型转换能够像使用一个函数那样去进行转换,比c风格的要更好一些。2,一般来说,建议以上两种类型转换方式不要使用,改为使用以下四种类型转换方式,如果你拒绝这个提议的话,那么建议使用函数式的类型转换方式。c++的显示类型转换旧式的类型转换存在很多问题,因此,在c++中引入了新的类原创 2021-10-07 23:55:06 · 169 阅读 · 0 评论 -
【c++教程】3.11-new和delete运算符
动态内存分配很多时候,我们无法事先知道我们需要多少个元素,因此很难提前进行内存的分配。如果事先分配的空间太小,那么就会装不下。如果事先分配的空间太大,又会造成浪费。因此,需要可以在运行的过程中,动态的对内存进行分配。如果只分配不释放,那么就会白白的浪费我们的内存空间,这也不是我们希望看到的,因此,在我们使用结束以后,还需要可以自行对其进行释放,这样一个动态的分配和释放内存的过程,就是动态内存分配。动态分配的内存对象,我们称之为堆对象。new分配内存,在c++中使用new运算符,它会动态的创建堆对原创 2021-10-05 23:59:02 · 279 阅读 · 0 评论 -
【c++教程】3.10-sizeof和alignof运算符
sizeof运算符sizeof可以得到一个对象的字节长度sizeof asizeof(a)1,首先我们需要知道的是,虽然sizeof()看起来很像一个函数,但是sizeof不是一个函数。2,一般来说,带括号的使用会更广泛一些,所以可以考虑多用带括号的版本。比如,如果sizeof的对象是一个表达式的话,那么就不能使用没有括号的版本。#include <iostream>using namespace std;int main(){ int a = 100;原创 2021-10-03 23:23:02 · 740 阅读 · 0 评论 -
【c++教程】3.9-条件和其他运算符
条件运算符条件运算符 a ? b : c1,这个运算符有很多种称呼方式,有的时候也会叫做三元运算符,三目运算符或者三元条件运算符,但是严格来说,叫做三元运算符或者三目运算符不是很准确。因为三元/三目一般指的是有三个操作数。虽然,符合这种要求的不多,而且最常用的就是这个条件运算符,但是,不可否认,(如果有)其他的符合这种条件的运算符,也都应该是三元运算符。所以称呼其为条件运算符,或者三元条件可能更合适一些。2, 这个运算符应该这样理解:a吗?如果a是true,那么b,如果a为false,那么c原创 2021-10-02 22:18:10 · 226 阅读 · 0 评论 -
【c++教程】3.8-成员指针运算符
成员指针指向对象的成员的指针(pointer to member of object) a.*b指向指针的成员的指针(pointer to member of pointer) a->*b1,pointer to member of object,首先我们要知道,member of object指的是a.b。所以,这个pointer to member of object指的是,指向a.b的指针。2,中文名字一般翻译的是,指向对象的成员的指针。这里面很奇怪的是,对象的成员是什么,是原创 2021-10-01 23:58:34 · 525 阅读 · 0 评论 -
【c++教程】3.7-成员运算符
成员运算符对象的成员 a.b指针的成员 a->b1, 对于对象的成员运算符,和其他的运算符一样,点的前后是可以有空格的,也就是说a.b是可以被写作a . b的,只不过一般很少会见到这样的情况。2,对象的成员运算符不可以被重载,指针的成员运算符不可以被任意重载(与一般的运算符重载不同,指针的成员运算符重载必须要像非重载的指针成员运算符那样去使用)。3,a->b应当等价于(*a).b其他成员运算符注:这些运算符可以操作成员,但并不算我们一般认为的成员运算符。所以,也可原创 2021-09-30 23:59:03 · 947 阅读 · 0 评论 -
【c++教程】3.6-位运算符
位运算符按位与 &按位或 |按位异或 ^按位取反 ~按位左移 <<按位右移 >>实际上,一般情况下,位运算符是很少使用的。有一种看法认为,位的操作是比较底层的,因此,在高级的语言中,都不应该出现或使用位操作。而c++中之所以有这些位运算符,首先是因为c++不是那么的高级,再其次一个重要的原因就是要和c兼容。当然即使不与c兼容,就按照c++一贯的作风,也大概会把这些都留下,我们不要好的,只要多的。位操作符说明1,按位与&操作两原创 2021-09-29 23:57:15 · 171 阅读 · 0 评论 -
【c++教程】3.5-比较运算符
比较运算符< 小于<= 小于等于> 大于>= 大于等于== 等于!= 不等于1,比较运算符返回的值为bool值,重载后的比较运算符返回的值未知。2, 虽然在c++中保留了非常多的东西,但是在这里是没有奇怪的===的等于运算符和<>这样的不等于运算符的。指针的比较指针是可以通过比较运算符进行比较的,但是一般来说,指针的比较之中只有==和!=两种情况,没有其他的运算。当然,或许你在使用指针进行比较的时候,使用了大于或者小于,这种情况原创 2021-09-28 23:58:44 · 450 阅读 · 1 评论 -
【c++教程】3.4-逻辑运算符
逻辑运算符逻辑与 &&逻辑或 ||逻辑非 !以上三种逻辑运算符,均有代名,等价于逻辑与 and逻辑或 or逻辑非 not这两种版本的用法是可以互相替代的,使用上没有任何差别,你习惯用什么,就可以用什么。之所以要使用and,or,not来代替原本的符号,从原始意义上来说,并非是为了简化使用,或者让程序更清晰,仅仅是为了替代某些字符集中可能不包含的符号,在这里也就是|。其中!和&并非属于不常用的符号,但是为了完整性,最终也是采用了and和no.原创 2021-09-27 23:57:53 · 617 阅读 · 0 评论 -
【c++教程】3.3-赋值运算符
赋值运算符普通的赋值运算符基础赋值 =算数赋值运算符(由基础赋值和算数运算符缝合而来)加法赋值 +=减法赋值 -=乘法赋值 *=除法赋值 /=取模赋值 %=位赋值运算符(由基础赋值和位运算符缝合而来,这部分较少会使用)按位与赋值 &=按位或赋值 |=按位异或赋值 ^=按位左移赋值 <<=按位右移赋值 >>=1,以上所有的赋值运算符,都可以用于重载。2,所有的赋值运算符,都应该返回其自身的引用。..原创 2021-09-26 23:54:39 · 756 阅读 · 0 评论 -
【c++教程】3.2-自增自减运算符
自增自减前自增 ++c前自减 --c后自增 c++后自减 c--1,自增运算符相当于+=1,自减运算符相当于-=1,因此自增自减运算符是可以被替代的。2,前自增/自减和后自增/自减的区别在于,前自增/自减是先增加/减少值,然后返回结果的引用。后自增/自减是先创建一个该对象的副本,然后再增加/减少值,最后返回副本。3,由于前自增/自减返回的是引用,后自增/自减返回的是复制,因此,一般而言,前自增/自减的效率要更高。因此如果不是必须要使用后自增/自减,都应该使用前自增/自减。例如原创 2021-09-25 19:23:17 · 758 阅读 · 0 评论 -
【c++教程】3.1-算数运算符
运算符和表达式一个操作数(可以是常量,也可以是一个标识符),就可以构成一个最简单的表达式。将多个操作数组合在一起,就可以构成复合的表达式。运算符(也可以叫做操作符)可以组合多个操作数。因此,也可以认为通过运算符,可以构成表达式。如果,运算符只需要一个操作数,那么就是一元运算符,也可以叫做单目运算符。如果需要两个操作数,那么就是二元运算符,也可以叫做二目运算符。如果需要三个操作数,那么就是三元运算符,也可以叫做三目运算符。运算符具有优先级和结合性。优先级高的运算符先运算,同等优先级的运算符按照结合原创 2021-09-24 20:26:27 · 213 阅读 · 0 评论 -
【c++教程】2.10-复数类型
复数严格来说,复数类型并不是c++语法的一部分,而且也有很多的人根本用不上复数,或者没有相关的数学知识。但是考虑到确实有很多人有使用复数的需求。最终决定还是将其放在这里。复数的实现被放在了头文件<complex>中,使用前需要先引入头文件,#include <complex>可选的三种模板类型1,complex<float>2,complex<double>3,complex<long double>初始化方法.原创 2021-09-23 22:55:18 · 2030 阅读 · 0 评论 -
【c++教程】2.9-枚举类型
魔法数字在程序中出现一个毫无征兆的数字,有的时候会将其叫做魔法数字。这种行为是不太好的。// 假如,我们定义了一种类型划分,1代表学生,2代表老师// 我想要在程序中判断某个变量是否是学生,因此写成了if (type == 1) // 1代表学生{ cout << "type是学生" << endl;}如果只看这一段程序,会让人感觉莫名其妙,1是哪里来的?为什么要等于1呢?当然,可能你会想说,那不要紧啊,我只要在注释里写清楚1是学生不就好了吗?大家一样也原创 2021-09-22 23:55:59 · 260 阅读 · 0 评论 -
【c++教程】2.8-联合体类型
联合体union,联合体类型,有的时候也会被叫做共用体。也是一种特殊的类类型,和结构体很相似。1,联合体所有的成员都共用同一段内存。联合体中的所有成员,只有一个可以是活跃的,其他的都是不可用的。2,联合体必须以分号结束。3,联合体不可以用于继承,没有虚函数。数据成员默认的声明方式为公有。4,在c++11以前,联合体不可以有含有自定义的构造函数,自定义的析构函数或者重载的复制赋值运算符的成员。在c++11以后,联合体可以有这些成员,但是相关的所有函数全都被丢弃,需要自行提供。联合体的使原创 2021-09-22 19:49:29 · 865 阅读 · 0 评论 -
【c++教程】2.7-结构体类型
结构体虽然在c++中,已经提供了很多种的基础数据类型。但是,即使内置再多的数据类型,也不可能总是能够很好的表达所有的用户需求。因此,必须要让用户能够自己定义数据类型。结构体就是一种可以自行定义的数据类型,结构体中可以存放一个对象的很多种信息。结构体的使用使用关键字struct,定义结构体#include <iostream>#include <string>using namespace std;int main(){ struct studen原创 2021-09-20 23:43:21 · 280 阅读 · 0 评论 -
【c++教程】2.6-vector类型
什么是vectorvector是标准库中提供的一种容器,可以替代数组使用,实现了许多数组不能满足的功能。使用vector需要包含头文件<vector>,并使用<>来指定要保存的数据类型vector的定义1,同数组一样,使用花括号进行初始化(c++11),如果不支持c++11,那么可能需要使用其他更为传统的方式。#include <iostream>#include <vector>using namespace std;int原创 2021-09-19 10:31:40 · 221 阅读 · 0 评论 -
【c++教程】2.5-数组类型
数组如果每个数据,都需要一个新的变量才能保存的话,那么100个数据,就需要定义100个变量了。这显然不是我们希望的事情。因此,可以把单一的数据类型集合组在一起,也就是数组。数组中可以保存多个数据,通过数据在数组中的位置来访问数据,也就是通过索引(下标)来进行访问。定义一个数组// 定义一个10个元素的数组int arr[10];按照规定来说,c++14以前,定义数组在指定元素个数的时候,必须使用一个常量表达式,非const变量不能用来定义数组。const int a = 10;原创 2021-09-18 16:56:46 · 286 阅读 · 0 评论 -
【c++教程】2.4-引用类型
什么是引用引用是一个对象的另外一个名字,作用和指针一样,但是使用的时候却不需要按照指针的方式使用。之所以要使用引用,就是因为使用指针的语法不容易。使用指针需要时刻注意,现在操作的到底是地址,还是地址中的值,而且还需要使用指针对应的操作符,这很麻烦。使用引用代替指针,就可以避免这些问题。引用的使用定义一个引用使用的也是取地址的运算符&,一个引用在定义的时候也必须要初始化,因为一个引用被定义以后,则不能改变引用的对象。int a = 100;// 定义了一个引用b,也相当于是给原创 2021-09-17 23:30:39 · 112 阅读 · 0 评论 -
【c++教程】2.3-指针类型
指针的定义,以及使用const限定符修饰指针原创 2021-09-16 23:49:19 · 355 阅读 · 0 评论 -
【c++教程】2.2-字符串类型
字符串的存储方式在程序中想要存储字符串,需要知道字符串从什么地方开始,到什么地方结束。也就是我们需要知道字符串的长度。因此,存储字符串有两种方式,一种是设置一个结束标志,从开始一直往后寻找,等到寻找到结束标志的时候,则字符串结束。另外一种存储字符串的方式,是在存储字符串的同时,用一个值去记录字符串的大小,也即是记录从开始到哪里字符串结束。C风格字符串c风格的字符串来源于c语言,在c++中仍然保留了,但是并不建议使用。c风格字符串也即是按照第一种方式进行的字符存储,通过寻找结束标志\0,来原创 2021-09-16 23:39:16 · 296 阅读 · 0 评论 -
【c++教程】2.1-字面量及基本类型
整型整型就是不包含小数部分的数字。进制十进制:正常使用的数字,即为十进制八进制:开头为0的数字,即为八进制十六进制:开头为0x或者0X的数字,即为十六进制二进制(c++14):开头为0b或者0B的数字,即为二进制后缀后缀u或者U,为无符号后缀l或者L,为long 类型后缀ll或者LL,为long long类型类型有符号类short:短整型int:整型long:长整型long long(c++11):长长整型无符号类unsign原创 2021-09-15 18:29:04 · 552 阅读 · 0 评论 -
【c++教程】1.5-简单的输入与输出
之前,在第一个程序中,我们已经用到过了cout。可以说,对于刚开始写程序来说,能够使用简单的输入和输出是非常重要的,因此我觉得有必要先提及一下。输出在c++没有延续使用c语言中的printf,而是使用了一个对象cout,并且通过插入运算符,把要输出的内容插入到输出流之中,进行输出,可以说和大多数的语言都不太一样。这也算是c++独有的风格使用cout进行基本输出#include <iostream> using namespace std;int main(){原创 2021-09-15 11:06:03 · 461 阅读 · 0 评论 -
【c++教程】1.4-变量的使用
标识符命名的规则,变量的声明,定义,赋值及存储类型,cv限定,typedef定义别名原创 2021-09-14 20:24:31 · 448 阅读 · 0 评论 -
【c++教程】1.3-预处理指令和命名空间
一,预处理指令在我们的第一个程序,你好世界中,首先我们使用的是#include <iostream>预处理器处理使用#开头的指令,#开头的指令也就是预处理指令。#include这是一个include预处理指令,做的工作是,指示编译器,把include要包含的内容,复制到本程序之中。也就是说,如果你不通过#include,自己手动把iostream的内容复制过来,效果也是一样的。至于include这个iostream,某种意义上来说,它并不算是c++本身的一部分。可以理解为是c++指定原创 2021-09-14 15:14:15 · 308 阅读 · 0 评论 -
【c++教程】1.2-分析第一个c++程序
一般来说,第一个程序都是你好,世界,这里我们直接给出代码#include <iostream>using namespace std;/* 这里是一个多行注释 作者:程程之光 时间:2021-09-14 说明:在屏幕上打印一条消息*/int main(){ // 这里是一个单行注释 cout << "Hello World" << endl; return 0;}如果出现执行程序,却看不到原创 2021-09-14 10:02:54 · 250 阅读 · 0 评论 -
【c++教程】1.1-c++的介绍
我并不打算详细的介绍c++的历史,以及c++的诞生过程,但是我还是预留出这样的一个章节,用于对完全不了解的人提供简单的介绍1,什么是c++?这是一门计算机程序设计语言,可以理解为是与计算机进行交流。2,c++是谁发明的,和c有什么关系?c++是Bjarne Stroustrup于1979年开始设计开发的,本身是c的继承和发展。最早的时候希望,所有的c程序,都可以直接放入c++中运行。3,和c语言的关系怎么样?无论从相似程度,还是从亲缘关系上来看,我们都认为c和c++应该是亲原创 2021-09-14 08:59:06 · 363 阅读 · 0 评论