C++ 对C语言的增强

首先,C++是以C语言为基础的,并且完全兼容C语言的特性。 学习C++语言,对于从来没有学习过面向对象的程序员来说,在学习C++语言时候,着重点学习C++语言面向对象的三大特性,这也是其他面向对象语言的三大特性,原理都一样,只是代码实现不同而已。

C++面向对象的三大特性

封装,继承,多态

 

1   namespace 命名空间

 

C中的命名空间

在C语言中只有一个全局作用域

       c语言中所有的全局标识符共享同一个作用域

       标识符之间可能发生冲突

C++

命名空间将全局作用域分成不同的部分

        命名空间可以相互嵌套

        全局作用域也叫默认命名空间

C++命名空间的定义:

namespace name 
{

}

C++命名空间的使用:

使用整个命名空间: using namespace name;

使用命名空间的变量:using name::variable;

  

结论:

C++标准为了和C区别开,也为了正确的使用命名空间,规定头文件不使用后缀.h

 

2    "实用性"增加

 

//c 语言中的变量都必须在作用域开始的位置定义!

  //C++中更加强调语言的”实用性“,所有的变量都可以在需要使用时候再定义。

 

3  register关键字增强

 

//register关键字,请求编译器让变量a直接放在寄存器里面,速度快。

         C语言中,无法取得register变量的地址

         C++语言中,C++编译器有自己的优化方式,可以取得register变量的地址。

而且现代的C++编译器比较智能,即使在不使用register关键字,也会将频繁使用的变量进行register优化。

 

4  变量检测的增强

 

C语言中,重复定义多个同名的全局变量是合法的。例如:

int g_var;

int g_var = 1;

但是在C++中,不允许定义多个同名的全局变量

C语言中的多个同名的全局变量,最终会被链接到全局数据区的同一个地址空间上。

 

5 struct 类型的加强

 

C语言中 struct定义了一组变量的集合,C编译器并不认为这是一种新的类型(注意)

因此用C语言中的struct类型定义变量时候,必须带上struct关键字。

c++语言中,是一种新的类型声明,并且可以在struct里面加上函数,默认的访问权限是public。 在功能上,跟类类型差不多。

 

6 C++中的所有的变量和函数必须有类型

 

在C语言中,

int f();//表示返回值为int,接受任意参的函数

int f(void);//表示返回值为int的无参函数

在C++语言中,

int f(); 
int f(void); //以上两行等价的,都表示函数返回值是int的无参函数

 

7 C++新增的Bool类型关键字

 

C++中bool 的值只可取 true和false

理论上bool只占一个字节,多个bool变量在一起,可能会占一个字节,取决于编译器实现。

true代表真值,编译器内部用1表示,

false代表假值,编译器内部用0表示,

C++编译器会在赋值时,把非0值转换为true,0值转换为false

 

8 三目运算符在c和C++编译器中的表现

 

C语言中,三目运算符返回的是变量的值,不能用作左值。

C++语言中,三目运算符返回的是变量本身,因此可以用在程序任何地方。

注意:三目运算符可能返回的值中如果有一个是常量值,则不能作为左值使用

               当左值的条件:要有内存空间,其实C++编译器是帮程序员取了一个地址而已。

int a = 20;
int b = 30;
*(a<b ?: &a, &b) - 30;
posted @ 2015-07-21 06:14  weijingyu  阅读(244)  评论(0编辑  收藏  举报