C和C++有什么区别?适用场景?
(1)C是面向过程的语言,而C++是面向对象的语言。因此C++语言中有类和对象以及继承多态这样的OOP语言必备的内容,此外C++支持模板,运算符重载,异常处理机制,以及一个非常强大的C++标准模板库STL,另外一个Boost库现在也归属C++标准库,提供了很多强大的功能。
(2)C只能写面向过程的代码,而C++既可以写面向过程的代码,也可以实现面向对象的代码;既然C++是面向对象的OOP语言,因此它还有非常强大的设计模式,比如单例,工厂,观察者模式等等,这些在C语言当中都是不支持的。
(3)C和C++在动态内存管理上不同。C语言通过malloc和free来进行堆内存的分配和释放,而C++是通过new和delete来管理堆内存的。new分配内存失败是抛出异常的,malloc是通过返回值和NULL比较进行判断的。(C和C++程序运行时的内存分布是一样的)
(扩展问题:new/malloc有什么区别,delete/free有什么区别?)
(4)强制类型转换上不同。C的强制类型转换使用()小括号里面加类型进行类型强转的,而C++有四种自己的类型强转方式,分别是const_cast,static_cast,reinterpret_cast和dynamic_cast。
(扩展问题:C++的四种强转类型及其适用场景?)
(5)C和C++的输入输出方式不同。printf/scanf,和C++的cout/cin的对比,前面一组是C的库函数,后面是ostream和istream类型的对象。
(6)C++还支持带有默认值的函数,函数的重载,inline内联函数,这些C语言都不支持,当然还有const这个关键字,C和C++也是有区别的,但是这都是目前最常用的C89标准的C内容,在C99标准里面,C语言借鉴了C++的const和inline关键字,这两方面就和C++一样了。
(7)由于C++多了一个类,因此和C语言的作用域比起来,就多了一个类作用域,此外,C++还支持namespace名字空间,可以让用户自己定义新的名字空间作用域出来,避免全局的名字冲突问题。
(8)C++不仅支持指针,还支持更安全的引用,不过在汇编代码上,指针和引用的操作是一样的。
(9)由于C++是面向对象的语言,支持类对象,类和类之间的代理,组合,继承,多态等等面向对象的设计,有很多的设计模式可以直接使用,因此在设计大型软件的时候,通常都会采用面向对象语言,而不会采用面向过程语言,可以更好的进行模块化设计,做到软件设计的准则:高内聚,低耦合!
(10)在C++中,struct关键字不仅可以用来定义结构体,它也可以用来定义类.。
(扩展问题:C++中struct和class的区别?)
C语言:
面向过程的(简单的解释就是碰到什么问题只针对这个问题写出解决方法)
偏底层和硬件,主要应用用于嵌入式开发,硬件驱动开发;但是无法处理大型的项目。
基本上所有的操作系统都是用C写的
C++:
C的扩张,可以理解为C/C++,面向对象实现了对现实世界的抽象。
应用领域:C能用的它基本也能,可以用于系统编程和驱动编程,一般用于开发大型应用,大型网络游戏等,绝大数的大型的网络游戏都是C++开发的。
C++使用比较复杂,应用范畴很广,在某些对硬件、操作系统、或是速度有要求的应用中,C++仍是首选。