c++基础知识点总结,c++的初步知识

  c++基础知识点总结,c++的初步知识

  一、C基础知识简介什么是C?1982年,比雅尼斯特劳斯特鲁普博士在C语言的基础上引入并扩展了面向对象的概念,发明了一种新的编程语言。为了表达这种语言与C语言的渊源关系,将其命名为C,因此,C基于C语言,可用于C语言中的过程化编程、基于对象的抽象数据类型编程、面向对象编程。

  PDF版,c材料教程,c电子书采集

  关注微信微信官方账号:“C和C plus plus”回复关键词:“C”即可获取。

  二、C语言基础知识介绍。看看C的版本历史C with classes class及其派生类,公有和私有成员,类的构造和销毁,友元,内联函数,赋值运算符重载等。

  1.0增加虚函数、重载函数和运算符、引用、常量等概念。

  C.0支持面向对象、添加保护成员、多重继承、对象初始化、抽象类、静态成员和常量成员函数。

  C.0进一步完善,引入模板,解决多重继承带来的二义性问题,处理相应的构造和析构。

  C 98 C标准的第一个版本得到了大多数编译器的支持,被国际标准化组织(ISO)和美国标准化协会认可。用模板重写了C标准库,并引入了STL(标准模板库)。

  C 03 C标准第二版的语言特点变化不大,主要是:修改错误,减少多样性。

  C 05 C标准委员会发布了技术报告(TR1),正式更名为C0x,即计划在本世纪第一个十年的某个时候发布。

  C 11增加了很多特性让C更像一门新语言,比如正则表达式、基于范围的for循环、auto关键字、新容器、列表初始化、标准线程库等。

  C 14对C 11的扩展主要是修复C 11的漏洞,并对其进行改进,如泛型lambda表达式、自动返回值类型派生、二进制文字常量等。

  C 17在C 11的基础上做了一些细微的改进,增加了19个新特性,比如:static_assert()的文本信息可选,Fold表达式用于变量模板,if和switch语句中的初始化器等。

  三。C基础知识介绍关键词C共有63个关键词:

  其中,C语言中的关键词被圈了起来。这里注意:false和true不是C语言中的关键字。

  四。C语言的命名空间,C语言入门的基础。在C/C中,变量、函数和类是大量存在的,这些变量、函数和类的名字会在全局范围内使用,可能会导致很多命名冲突。

  使用namespace的目的是将标识符和名称本地化,避免命名冲突或名称污染,namespace keyword的出现就是针对这个问题。

  要定义一个名称空间,需要使用namespace关键字,后面是名称空间的名称,再后面是一对{},其中的名称是命名的。

  空间的成员。

  注意:一个名称空间定义了一个新的作用域,名称空间中的所有内容都局限于该名称空间。

  1.命名空间的通用定义

  2.名称空间可以嵌套

  3.同一个项目中允许有多个同名的命名空间,编译器最终会将它们合成到同一个命名空间中。

  它将与上面的xjt名称空间合并。

  五、C基本命名空间的使用

  显然,直接打印printf是不可能的。因为你这样调用printf的地址,就会有这样的结果。有以下三种正向调用方法。

  1.带有命名空间名称和作用域限定符的符号“:”在c中称为作用域限定符,我们可以通过“命名空间名称:命名空间成员”来访问命名空间中对应的成员

  2.使用命名空间名称来介绍

  然而,这种方法有一些缺点。如果我们在名称空间中定义了一个名为printf的变量,那么以后引入名称空间xjt就会造成命名污染。

  为了解决这个问题,出现了第三种引入方法。

  3.使用using在命名空间中引入成员。

  这种方法可以防止命名污染,因为它只引入了一部分。

  不及物动词C语言入门基础知识的输入与输出

  C语言中有标准的输入输出函数scanf和printf,C语言中有cin标准输入和cout标准输出。要在C语言中使用scanf和printf函数,必须包含头文件stdio。在C语言中使用cin和cout需要包含头文件iostream和std标准命名空间。

  C的输入输出方式比C更方便,因为C的输入输出不需要控制格式,比如integer是%d,character是% c。

  注:endl,这里的L不是阿拉伯数字1,而是26个英文字母的L,相当于换行。

  这里还要注意cin的特点,有点类似于C语言中的gets。当遇到换行符时获取停止符,而cin由空格、制表符或换行符分隔。因此,在这里键入hello world将由一个空格字符分隔。

  我在这里输入了hello world,但是因为输入中有一个空格,后续的内容不会被读入,所以hello存储在arr中。

  七。C-Default参数简介Default参数是在声明或定义函数时,为函数的参数指定一个默认值。当调用这个函数时,如果没有指定参数,它将被使用。

  默认值,否则使用指定的参数。

  1.所有默认所有默认参数,即函数的所有参数都设置为默认参数。

  2.半默认参数

  注意:

  半默认参数必须从右到左给定,不能间隔给定。

  默认参数不能同时出现在函数声明和定义中。

  因为:如果声明和定义位置同时出现,并且两个位置提供的值不同,那么编译器就无法确定应该使用哪个默认值。

  默认值必须是常量或全局变量。

  八。C -C函数重载介绍1。函数重载是函数的一个特例。c允许在同一个作用域中声明几个具有相似函数的同名函数。这些同名函数的参数表(参数的个数或类型或顺序)一定是不同的,常用来处理函数相似的数据类型不同的问题。

  注意:如果只是返回值不同,其他都一样,就不构成函数重载。

  2.C函数重载的原理为什么C支持函数重载,而C语言不能?

  这里我们就来复习一下之前的知识。在运行到可执行文件之前,我们必须经历这些阶段:预编译、编译、汇编和链接。

  其实问题出在编译后的汇编阶段,因为这里C和C语言略有不同。让我们来看看:

  用C语言编译器编译后

  用C编译器编译后

  总结:

  其实归根结底是因为C编译器和C编译器对函数名的修饰不同。gcc下的修饰规则是:[_Z函数长度函数名类

  键入姓名首字母]。

  其实这也告诉了我们为什么函数的返回类型不一样,不构成函数重载,因为修饰规则不受返回值的影响。

  3.extern“C”有时候在C工程中,可能需要按照C的风格来编译一些函数,在函数前加上extern“C”意味着告诉编译器,

  按照C语言的规则编译函数。比如tcmalloc是google用C实现的项目,提供了tcmallc()和tcfree。

  两个接口来用,但是如果是C项目就不能用了,所以他用extern“C”来解决。

  九。C语言入门基础知识-参考1。引用引用不是新定义的变量,而是现有变量的别名。编译器不会为引用的变量打开内存空间,它和它

  引用的变量共享相同的内存空间。

  类型引用变量名(对象名)=引用实体;

  注意:参照类型必须与参照实体的类型相同。

  2.被引用的特征引用在定义时必须初始化。

  一个变量可以有多个引用。

  一个实体一旦被引用,其他实体就不能被引用。

  但实际效果是C的值赋给了B,因为B是A的引用,所以A的值变成了20。

  3.如上所述,引用类型必须与引用实体的类型相同。但只是同类型,不保证能报价成功。这里还要注意是否可以修改。

  这里A,B,D都是常数,常数不能修改。但是如果用int ra引用A,引用的A是可以修改的,所以会有问题。

  让我们来看看这样一段代码:

  这句话正确吗?要理解这个问题,首先要理解隐士型提升的问题,这里有从int到double的隐士型提升,在提升的过程中,系统会创建一个常量区域来存储A型提升的结果。所以在这里,这段代码一看就是错的,因为当你的隐士类型提升时,A是存放在常量区的,常量区是不能修改的,但是你用双ra来指代他,ra的引用是可以修改的。

  添加一个const可以解决这个问题。

  注意:不能用一个可读可写的量来引用一个未修改的量,但反过来是可能的。可以用只读量来指代可读和可写的量。

  4.引用的场景作为参数引用。

  记住C语言中的交换函数。学习C语言时,经常用交换函数来解释值传递和地址传递的区别。既然我们已经学会了引用,我们可以不用指针作为参数。因为这里A和B是传入参数的引用,所以我们交换A和B的值,这相当于交换两个传入参数。

  当然引用也可以作为返回值,但是需要注意的是我们返回的数据不能是函数内部创建的普通局部变量,因为函数内部定义的普通局部变量会随着函数调用的结束而被销毁。我们返回的数据必须是被静态、动态开发或全局变量修改的数据,这些数据不会随着函数调用的结束而被破坏。

  不添加静电的后果

  你想知道为什么你印了7而不是2吗?

  这就更奇怪了。中间加个printf为什么要打印随机值?

  我们来看看分析:

  为什么会有随机值?因为你在函数中定义的变量是临时变量,函数一出就会被破坏,然后随机指向内存中的一个空间。所以在引用函数的返回值时,最好在函数中定义的变量上加上static。

  你觉得你现在真的理解这个代码了吗?

  你可能会好奇?为什么这里是3?让我们来看看分析

  其实如果换一种写法,这里的结果会变成7。原因也很简单,就是上图说的原因。

  注意:函数返回时,超出了函数的作用域,返回的对象还没有返回给系统,可以用reference返回;如果已经返回到系统中,则必须按值返回。

  这句话是下面的例子:

  有没有感觉这个引用返回用起来很奇怪?我们来分析一下是如何返回的。

  总结:

  在传递值的过程中会产生一个副本,而在传递引用的过程中不会产生。其实它在做函数参数的时候也有这个特点。

  5.引用和指针的区别。在语法概念上,指称是别名,没有独立的空间,与其指称实体共享同一个空间。

  实际上,底层实现是有空间的,因为引用是以指针的方式实现的。

  我们来看看引用和指针的汇编代码对比。

  和引用指针。

  引用定义必须初始化,指针不是必需的。

  在引用初始化过程中引用一个实体时,不能引用其他实体,指针可以随时指向同类型的任何实体。

  没有空引用,只有空指针。

  sizeof中的含义不同:引用的结果是引用类型的大小,但指针始终是地址空间的字节数(32位平台为4字节)。

  引用递增操作相当于实体递增1,而指针递增操作是指针向后偏移一种类型的大小。

  有多级指针,但没有多级引用。

  访问实体有不同的方式。指针需要显示解引用,而引用由编译器自己处理。

  使用它比使用引用指针相对更安全。

  X.C语言基础知识介绍-内联函数1。其概念用inline修饰的函数称为inline function。在编译时,C编译器将在调用内联函数的地方进行扩展,而没有函数堆栈按压的开销。

  内嵌函数提高了程序运行的效率。(看到加粗的部分,小伙伴一定会想,这是不是很像C语言中的宏?)

  如果在上述函数之前添加inline关键字,将其改为内联函数,编译器会在编译时用函数体替换对该函数的调用。

  2.特性内联是一种以空间换时间的方式,节省了调用函数的开销。因此,具有长/递归代码的函数不适合用作内联函数。

  内联只是给编译器的一个建议,编译器会自动优化。如果函数体中定义为内联的代码是长/递归的,等等。编译器在优化时将忽略内联。

  内联不建议声明和定义分离,这样会导致链接错误。因为inline是扩展的,没有函数地址,找不到链接。

  什么技术可以取代宏?

  将常量定义更改为const

  将函数定义更改为内联函数。

  XI。auto关键字(C 11)在早期的C/C中,auto的意思是:auto修改的变量是一个有自动记忆的局部变量,可惜没人用过。

  在C 11中,标准委员会给auto赋予了新的含义:auto不再是一个存储类型指示器,而是一个新的类型指示器,用来指示编译器。auto声明的变量必须由编译器在编译时派生。可能你光看这句话是理解不了的。这里有一些例子。

  #包括iostream

  使用命名空间std

  int TestAuto()

  {

  返回10;

  }

  int main()

  {

  int a=10

  汽车b=a;

  auto c= a

  auto d=TestAuto();

  cout typeid(b)。name()endl;//这个地方要等你学会下面的课才能解释。类型名称打印在这里。

  cout typeid(c)。name()endl;

  cout typeid(d)。name()endl;

  cout a endl

  cout b endl

  cout c endl

  cout d endl

  //auto e;无法编译,使用auto定义变量时必须初始化变量。

  返回0;

  }

  注意:当使用auto定义变量时,有必要对它们进行初始化。在编译阶段,编译器需要根据初始化表达式推导出auto的实际类型。因此,auto不是“类型”声明,而是声明类型时的“占位符”,编译器会用

  变量的实际类型。

  1.汽车使用细则。auto与指针和引用结合使用。

  使用auto声明指针类型时,auto和auto*没有区别,但使用auto声明引用类型时,必须添加

  注意:使用auto声明引用时,必须添加它。否则,您将只创建一个与实体类型相同的普通变量,只是更改其名称。

  在同一行中定义多个变量。

  当在同一行中声明多个变量时,这些变量必须是同一类型的,否则编译器会报告一个错误,因为编译器实际上只

  第一种类型是派生的,然后派生的类型用于定义其他变量。

  2.auto无法推导的场景。auto用作该函数的参数。

  Auto不能直接用于声明数组。

  为了避免与C 98中的auto混淆,C 11只保留了auto作为类型指示器的用法

  实际上,auto最常见的优点是它与C 11提供的新for循环以及lambda表达式一起使用。

  十二。基于范围的for循环(C 11) 1。如果你想在C 98中遍历一个数组,你可以这样做:

  对于有作用域的集合,程序员解释循环的作用域是多余的,有时很容易出错。因此,在C 11中

  引入了基于范围的for循环。for循环后的括号用冒号“:”分为两部分:第一部分是用于迭代的范围内的变量,第二部分表示迭代的范围。

  注意不能写成auto,否则不会改变原数组。

  的正确书写

  注意:和普通循环类似,可以用continue结束这个循环,或者break跳出整个循环。

  2.范围的使用条件。必须确定循环的迭代范围。

  对于数组,是数组中第一个和最后一个元素的范围;对于这门课,你应该提供开始和结束

  方法begin和end是for循环迭代的范围。

  注意:下面的代码有问题,因为for的范围不确定。

  迭代对象实现and==运算。

  稍后我们会谈到迭代器,但是现在大家了解一下就够了。

  十三。C-指针nullptr 1简介,C 98中的指针Nullptr1

  在良好的C/C编程习惯中,最好在声明变量时给它一个合适的初始值,否则可能会出现意外的错误。比如未初始化的指针,如果一个指针没有合法的点,我们基本上初始化如下:

  实际上,NULL是一个宏。在传统的C头文件(stddef.h)中,您可以看到下面的代码

  正如您所看到的,NULL可能被定义为一个0的文字常量,或者是一个没有类型指针的常量(void*)。无论采用什么定义,在使用空指针时都不可避免地会有一些麻烦,比如

  程序的本意是通过Fun(NULL)调用Fun(int* p)函数的指针版本,但是由于NULL被定义为0,所以Fun(NULL)最后调用的是Fun(int p)函数。

  注意:在C 98中,文字常量0可以是整数,也可以是无类型指针(void*)常量,但编译器默认将其视为整数常量。如果你想用它作为指针,你必须转换它。

  2.C 11中的指针空值针对C 98中的问题,C 11引入了关键字nullptr。

  当使用nullptr表示空指针值时,不需要包含头文件,因为nullptr是C 11作为关键字引入的。

  在C 11中,sizeof(nullptr)和sizeof((void*)0)的字节数相同,大小为4。

  上一版PDF,C材料教程,C电子书获取关注微信微信官方账号:“C和C plus plus”回复关键词:“C”即可获取。

  评论0发表评论。

  wx607e73271c1c3

  2022-03-25 15:46

  欢迎各位善意的评论。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • office2010激活密钥大全 怎么永久激活office2010
  • project2010产品密钥免费_project2010激活密钥永久激活码
  • c语言调用退出函数 c语言退出整个程序怎么写
  • c语言中怎么给函数初始化 c语言的初始化语句
  • c语言编写函数计算平均值 c语言求平均函数
  • chatgpt是什么?为什么这么火?
  • ChatGPT为什么注册不了?OpenAI ChatGPT的账号哪里可以注册?
  • OpenAI ChatGPT怎么注册账号?ChatGPT账号注册教程
  • chatgpt什么意思,什么是ChatGPT ?
  • CAD中怎么复制图形标注尺寸不变,CAD中怎么复制图形线性不变
  • cad中怎么创建并使用脚本文件,cad怎么运行脚本
  • cad中快速计算器的功能,cad怎么快速计算
  • cad中快速修改单位的方法有哪些,cad中快速修改单位的方法是
  • cad中心点画椭圆怎么做,cad轴测图怎么画椭圆
  • CAD中常用的快捷键,cad各种快捷键的用法
  • 留言与评论(共有 条评论)
       
    验证码: