初学C\C++的同学,被问的最多的肯定就是C与C++的区别了,而回答最多也一定是“C是面向过程的,C++是面向对象的”,但是C的代码只能面向过程,C++只能面向对象吗?其实并不然。
所谓的面向对象指的是C++语言, 在设计之初,是为面向对象而设计的,面向过程亦然。C也可以进行面向对象的编程,只是实现的过程可能相比之下会麻烦一些。时至今日也有不少C的大牛使用C with class的方法进行开发。这样你可能会问:为什么使用起来没有C++好用,他们还要这样使用呢?答案也很简单:一、习惯,二、C相比于C++更灵活。
说到灵活,C比C++灵活更灵活体现在那些方面呢?
C++比C的类型安全检查更严格。
比如我们知道,const常量在程序中是一旦定义就不能改变的。但是我们可以通过如下C的代码更改const常量的值:
const int a =1;
int *p =&a;
*p = 10;
const int *p = &a;这一句中,&a的类型为const int *,但是将它强行赋值给int *类型的变量p后,const被忽略了。但是在C++中就不行。值得一提的是,在C++中,声明一个const常量时,必须对其进行初始化,因为这之后常量的值都不能再进行改变,但是在C语言中你就可以在声明时不对其初始化。
第二个区别就是增加了bool类型和String类。
C语言中表示真假使用0和非0,而C++可以使用true和false代表真和假,用bool类型的变量存储true和false的状态。值得注意的是bool类型还可以用数值进行赋值,这也和它的实现方式有关系:bool类型是用enum类型来实现的。
enum bool{
false,
true
};
说到枚举类型,又不得不说一个区别:
C语言中如下代码是跑得通的:
enum state
{
walk,
idle,
run
};
enum state s =100;
因为C的设计者开放了这些从而使得C十分灵活。
C++中用数值对枚举进行赋值时,要确保枚举元素中有这个数值对应的元素。
注意:C++中尽量不要使用宏定义,而是使用枚举类型代替宏。
第三点区别,表达式做左值的问题。
C语言中,表达式不能做左值,例如如下代码就是报错:
int a, b = 10;
(a = b) = 100;
但是在C++中,这段代码是正确的。首先将b的值赋给a,此时a为10,b为10,表达式的值为a的值;随后将100赋值给表达式,由于(a=b)执行后,表达式的值为a的值,所以就是将100赋值给a。
运行结果:a=100,b=10。