我是靠谱客的博主 土豪茉莉,最近开发中收集的这篇文章主要介绍C++对C语言的增强,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

1.1.引入了命名空间的概念(namespace)与作用域限定符(::)

       C语言对于不同开发者在合作开发项目时,不同文件最终结合链接为最终项目时,不同文件里的同名变量可能产生冲突的问题[一般是报错重复定义]采用的解决方案是使用static关键字,即将该变量的作用范围限制在本文件内使用,但是这样也会导致部分代码的可复用性变差,在外部无法调用,因此C++引入命名空间概念,为了使用不同命名空间的成员,也引入了作用域限定符来访问特定命名空间的变量。

     注意: 命名空间可以嵌套定义,即可以在命名空间A内嵌套定义命名空间B,访问时需要双重作用域限定符,例如访问B中的变量a, cout<<A::B::a<<endl;命名空间最好少用using随便导入全局空间,否则会破坏命名空间的限制作用,导致变量重复定义或者冲突。C++允许在不同源文件里定义同名的命名空间,但是要注意作用域限定符会默许访问本文件的命名空间的变量(除非使用using导入)

1.2 增强了输入输出函数(cout cin)

       对于传统的输入输出scanf与printf,其格式控制比较复杂,在C++中为了简化格式控制,将其升级后放入了标准命名空间中,并重命名为cin与cout,注意cin有其它成员函数cin.get()【读一个字符】,cin.getline()【获取一整行】等。C语言中printf是行缓冲模式,一般由n来进行流的刷新,cout与其一样,也属于行缓冲。但是C++引入了cerr(无缓冲)与clog(缓冲),可用于与dup配合进行重定向输出日志与出错文件保存信息。

1.3 constexpr

      C语言的define不检查语法错误,只做替换constexpr在编译期间处理,没有额外开销,做类型检查,返回值为常量可以声明为该类型.

1.4 register

      register关键词的作用是请求编译器j尽k让变量直接存放在寄存中,以提升变量的访问速率
C语言:register关键词不可以取地址,因为不在内存之中,C++中:register关键词可以取地址,一旦取地址后,regitser关键词变得无效,被定义的变量会被放到内存中

1.5 const

    C语言const定义的是只读变量,可以通过取其地址然后通过指针间接改变其值,在C++中,const定义的是常量 ,不能改变其值。

1.6 struct

    C语言的struct定义的类型不是一种新类型,每次说明该类型时必须加上struct关键字(除非使用typedef重命名),C++认为struct是一种新类型,以后使用该类型时,可以不加struct 关键字。并且C++在结构体中允许定义函数成员,而在C语言的结构体里不能定义函数。同时struct可以指定访问权限,private,public,protected。一般默认不说明时是公有权限。

private/protected:只能在结构体里访问,结构体外访问不到

public:可以在外部直接访问

      访问权限的好处在于隐藏了数据,提高了数据的安全性。但是要修改变量时,必须提供对应的访问操作函数,即get/set方法。C++对struct的升级的主要目的是为了引入类(class)的概念,定义的结构体如果把struct关键字换成class也是符合语法的,并且类可以继承,结构体也能继承,二者几乎完全一样,只是有两点不同:

二者的名称不同,一个是类,其实例化的变量叫做对象,其成员变量称为属性,成员函数称为方法,另一个是结构体,实例化变量叫做结构体变量;

再者,struct 的默认权限是公有,而class默认权限是私有。

1.7 auto

     C语言的auto一般可以省略,表示自动类型的变量,使用完后自动释放,在C++中将其增强为自动类型推导,可以根据赋予的初值自动推导该变量的类型。

1.8 typedef  / using

 函数:int add(int a,int b);

C语言中对函数指针的重命名不友好,在C++中进行了优化

C:  typedef int (*P_FUNC)(int ,int);                      P_FUNC  p_add=add;

C++: using P_FUNC  = int(*)(int ,int) ;                 P_FUNC  p_add=add;

1.9 三目运算符

a=1,b=20;

C:    a>b?a:b ;    返回的是一个变量b的值20

C++:    a>b?a:b ;    返回的是一个变量,可以赋值    (a>b?a:b)=10;(将b赋值10)

1.10 foreach

C++ :数组遍历 int a[5]={0,1,2,3,4} ;    for(int tmp:a)      cout<<tmp;

1.1 while

支持逗号表达式,while(a>b,c>b)等等

最后

以上就是土豪茉莉为你收集整理的C++对C语言的增强的全部内容,希望文章能够帮你解决C++对C语言的增强所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(45)

评论列表共有 0 条评论

立即
投稿
返回
顶部