c++入门书籍推荐,c++入门自学

  c++入门书籍推荐,c++入门自学

  文章前言一、C关键字(C 98)二、命名空间2.1命名空间定义2.2命名空间使用命名空间有三种方式:1。添加名称空间名称和范围限定符2。使用using在命名空间3中引入成员。使用使用名称空间名称来介绍3。c输入输出4、默认参数4.1默认参数的概念4.2默认参数的分类所有默认参数半默认参数4.3。默认值必须是常量或全局变量4.4。C语言不支持(编译器不支持)5。函数重载5.1。函数重载的概念5.2 name Mangling 5.3 EXTERN“C”VI。引用6.1引用概念6.2引用特征6.3经常引用6.4使用场景1。制作参数2。Make返回值6.5传值和引用的效率比较6.6引用和指针的区别6.7引用和指针的区别:前言1。C关键字(C 98)C共有63个关键字,C语言有32个关键字。

  2.Namespace在C/C中,后面还有很多变量、函数、类要学。这些变量、函数和类的名字都将存在于全局工作中。

  在域中,可能会有许多冲突。使用名称空间的目的是本地化标识符的名称,以避免命名冲突或名称。

  污染,命名空间关键字的出现就是针对这个问题。

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

  空间的成员。

  //1.普通名称空间

  命名空间N1 //N1是命名空间的名称。

  {

  //命名空间中的内容,可以定义变量和函数。

  int a;

  int Add(int left,int right)

  {

  向左向右返回;

  }

  }

  //2.名称空间可以嵌套

  命名空间N2

  {

  int a;

  int b;

  int Add(int left,int right)

  {

  向左向右返回;

  }

  命名空间N3

  {

  int c;

  int d;

  int Sub(int left,int right)

  {

  向左向右返回;

  }

  }

  }

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

  命名空间N1

  {

  int Mul(int left,int right)

  {

  返回左*右;

  }

  }注意:一个名称空间定义了一个新的作用域,名称空间中的一切都局限于那个名称空间。

  2.2命名空间的用法应该如何使用命名空间中的成员?例如:

  命名空间N

  {

  int a=10

  int b=20

  int Add(int left,int right)

  {

  向左向右返回;

  }

  int Sub(int left,int right)

  {

  向左向右返回;

  }

  }

  int main()

  {

  printf(%d\n ,a);//编译此语句时出错,无法识别a。

  返回0;

  }命名空间可以有三种使用方式:1。添加命名空间名称和范围限定符int main()

  {

  printf(%d\n ,N:a);

  返回0;

  }2.使用using将命名空间中的成员引入using N:b;

  int main()

  {

  printf(%d\n ,N:a);

  printf(%d\n ,b);

  返回0;

  }3.使用using命名空间名称引入using命名空间n;

  int main()

  {

  printf(%d\n ,N:a);

  printf(%d\n ,b);

  添加(10,20);

  返回0;

  } C I/O新生婴儿会用自己独特的方式迎接这个全新的世界。C出来之后,是新生事物,那么C是不是也应该向这个美好的世界问好呢?我们来看看C是怎么实现问候语的。

  #包括iostream

  使用命名空间std

  int main()

  {

  cout Hello world!endl

  返回0;

  }描述:

  当使用cout标准输出(控制台)和cin标准输入(键盘)时,必须包括iostream头文件和std标准命名空间。

  介于。

  注意:早期的标准库在全局域中实现了所有的函数,并在头文件中用。h后缀,使用时只需要包含相应的头文件。

  也就是后来,它实际上会出现在std名称空间中。为了将其与C头文件区分开,并正确使用命名空间,指定了C头文件。

  没有。h;旧编译器(vc 6.0)也支持Iostream.h格式,但后续编译器不支持,建议使用。

  性病的方式。用C输入输出更方便,不用添加数据格式控制,比如:shaping-% d,character-%。

  四。默认参数4.1默认参数的概念默认参数是在声明或定义函数时,为函数的参数指定一个默认值。当调用这个函数时,如果没有指定参数,它将被使用。

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

  void TestFunc(int a=0)

  {

  cout a endl

  }

  int main()

  {

  test func();//当没有传递参数时,使用参数的默认值

  test func(10);//传递参数时,使用指定的参数。

  }4.2默认参数分类所有默认参数

  半默认参数

  注意:

  半默认参数必须从右到左依次给定,不能分开。默认参数不能同时出现在函数声明和定义中。///a.h

  void test func(int a=10);

  //交流

  void TestFunc(int a=20)

  {}

  //注意:如果生命和定义的位置同时出现,并且两个位置提供的值不同,那么编译器无法确定应该使用哪个默认值。4.3.默认值必须是常量或全局变量。4.4.C语言不支持(编译器不支持)。五、函数重载5.1。函数重载是函数的一个特例。c允许在同一个作用域中声明几个具有相似函数的同名函数。这

  参数列表(参数的个数、类型或顺序)必须不同,常用于处理函数相似的不同数据类型的问题。

  int Add(int left,int right)

  {

  向左向右返回;

  }

  双加法(双左,双右)

  {

  向左向右返回;

  }

  长加法(长左,长右)

  {

  向左向右返回;

  }

  int main()

  {

  添加(10,20);

  添加(10.0,20.0);

  加(10L,20L);

  返回0;

  }下面两个函数属于函数重载吗?

  短加法(短左,短右)

  {

  向左向右返回;

  }

  int Add(短左,短右)

  {

  向左向右返回;

  结果显然不是,因为函数重载的类型与返回值无关。

  5.2 name Mangling为什么C支持函数重载,而C语言不支持?

  在C/C语言中,一个程序需要经历以下几个阶段:预处理、编译、汇编和链接。

  我们的实际项目通常由多个头文件和多个源文件组成,通过我们在C语言阶段学习的编译链接,我们

  可以,【在当前a.cpp中调用b.cpp中定义的Add函数时】,编译后链接前不在a.o的目标文件中。

  add的函数地址,因为Add是在b.cpp中定义的,所以Add的地址在b.o中.那我该怎么办呢?所以链接阶段是专门针对这类问题的。当链接器看到a.o调用Add,但是没有Add的地址,就会得到B.O的符号。

  在号码表中找到Add的地址,然后将它们链接在一起。(如果学生忘记了上面的流程,我们老师会带学生复习一下。)链接时,连接器将使用哪个名称来查找Add函数?这里的每个编译器都有自己的函数名修饰符。

  然后。由于Windows下vs的装修规则过于复杂,而Linux下gcc的装修规则简单易懂,下面我们用gcc演示。

  修改后的名称。我们从下面可以看到,修改后gcc的函数名称不变。并将g的函数修改为[_Z函数长度函数名类。

  键入姓名首字母]。

  用C语言编译器编译结果

  这里理解为C语言不能支持重载,因为同名函数无法区分。c以函数修改规则来区分。

  点,只要参数不一样,修饰名就不一样,支持重载。另外,我们也明白了为什么函数重载需要不同的参数!与返回值无关。5.3 Extern“C”有时候在C工程中,可能需要按照C的风格来编译一些函数,在函数前加上Extern“C”就是告诉编译器,

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

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

  extern C int Add(int left,int right);

  int main()

  {

  添加(1,2);

  返回0;

  }六。参考6.1参考概念参考不是变量的新定义,而是现有变量的别名。编译器不会为引用的变量打开内存空间,它和它

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

  比如李悝jy,在国内被称为‘铁牛’,在江湖被称为‘黑旋风’。

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

  void TestRef()

  {

  int a=10

  int ra=a;//===定义引用类型

  printf(%p\n ,a);

  printf(%p\n ,ra);

  }注意:引用类型必须与引用实体的类型相同。

  6.2引用特征引用必须在定义变量时初始化变量。可以有多个引用。一个实体一旦被引用,其他实体就不能被引用。

  6.3经常引用void TestConstRef()。

  {

  const int a=10

  //int ra=a;//该语句编译时会出错,A是常量

  const int ra=a;

  //int b=10;//这个语句编译的时候会出错,B是常量

  const int b=10

  双d=12.34

  //int rd=d;//该语句将以不同类型的错误进行编译。

  const int rd=d;

  }6.4使用场景1。使参数void Swap(int left,int right)

  {

  int temp=left

  左=右;

  右=temp

  }2.做返回值int Count()

  {

  静态int n=0;

  n;

  //.

  返回n;

  }下面的代码输出什么结果?为什么?

  int Add(int a,int b)

  {

  int c=a b;

  返回c;

  }

  int main()

  {

  int ret=Add(1,2);

  添加(3,4);

   cout Add(1,2)是: ret endl

  返回0;

  }//ret是一个随机值,因为它是在Add的范围C之外销毁的。

  6.5值传递和引用传递的效率比较以值为参数或返回值类型。在参数传递和返回期间,函数不会直接传递实参或直接返回变量,但是

  传递参数或返回变量的临时副本,因此使用值作为参数或返回值类型是低效的,尤其是

  当参数或返回值类型非常大时,效率就更低了。

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

  int main()

  {

  int a=10

  int ra=a;

  cout a= a endl

  cout ra= ra endl

  返回0;

  }底层实现其实是有空间的,因为引用是用指针的方式实现的。

  6.7引用和指针的区别:引用在定义时必须初始化。指针不需要引用。初始化时引用一个实体后,就不能引用其他实体,指针可以随时指向同类型的任何一个。

  没有对实体的空引用,但sizeof中有一个含义不同的空指针:引用结果是引用类型的大小,但指针始终是地址空间中的字节数(32位平台下占

  4字节)实体指自加指增加1,指针自加指指针向后偏移。一个类型的大小有多级指针,但没有多级引用。访问实体有不同的方法,指针需要显式解引用。使用引用编译器处理引用本身比处理指针更安全。

郑重声明:本文由网友发布,不代表盛行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各种快捷键的用法
  • 留言与评论(共有 条评论)
       
    验证码: