C++ 对C语言的增强

本文深入探讨了C++语言的三大面向对象特性:封装、继承和多态,同时阐述了C++相较于C语言在命名空间、变量定义、register关键字、变量检测、struct类型、函数类型、布尔类型和三目运算符等方面的关键增强功能。

首先,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++中更加强调语言的”实用性“,所有的变量都可以在需要使用时候再定义。



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语言中,

<pre name="code" class="cpp">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;





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值