C++与其他语言的对比
C 语言是典型面向过程(Procedure Oriented)的编程语言,C++ 则是典型面向对象(Object Oriented)的编程语言,当然 C++ 也支持面向过程编程。
- 面向过程(
Procedure Oriented
):一种以过程为中心的编程思想,侧重于分析解决问题所需的步骤,使用函数把这些步骤依次实现。 -
面向对象(Object Oriented):侧重于把构成问题的事务分解为各个对象。建立对象的目的不是完成其中的一个步骤,而是描述某个事务在解决整个具体问题步骤中的行为。面向对象语言的显著特征就是支持封装、继承、类的抽象。
C
语言:C 语言诞生于 1969 年在贝尔实验室诞生,C 语言是面向过程的编程,它最重要的特点是函数,通过 main 函数来调用各个子函数。程序运行的顺序都是程序员事先决定好的。截至本书完书时,当前 C 语言的最新稳定版本为 C18.
C++
语言: C++ 是面向对象的编程,类是它的主要特点,在程序执行过程中,先由主 main 函数进入,定义一些类,根据需要执行类的成员函数,过程的概念被淡化了(实际上过程还是有的,就是主函数的那些语句)。以类驱动程序运行,类就是对象,所以我们称之为面向对象程序设计。面向对象在分析和解决问题的时候,将涉及到的数据和数据的操作封装在类中,通过类可以创建对象,以事件或消息来驱动对象执行处理。
两者之间的比较::C++ 既继承了 C 强大的底层操作特性,又被赋予了面向对象机制。它特性繁多,支持面向对象语言的多继承、对值传递与引用传递的区分以及 const 关键字,现代 C++ 编译器完全兼容 C 语言语法。
不同:
C
为面向过程的编程语言,不支持面向对象,不支持继承、多态、封装。-
类型检查更为严格,C 语言中的类型转换几乎是任意的,但是 C++ 编译器对于类型转换进行非常严格检查,部分强制类型转换在 C 语言编译器下可以通过,但在 C++ 编译器下无法通过。
- C 和 C++ 中都有结构的概念,但是在 C 语言中结构只有成员变量,而没成员方法,C 的成员变量没有权限控制,该结构体的变量对所有调用全部可见;而在 C++ 中结构中,它可以有自己的成员变量和成员函数,C++ 对类的成员变量具有访问权限控制。
- C++增加了面向对象的机制、泛型编程的机制(
Template
)、异常处理、引用、运算符重载、标准模板库(STL
)、命名空间(避免全局命名冲突)。 -
对于 C 语言程序员来说,程序的底层实现和内存分布基本上都可见,所以一般常用于直接控制硬件,特别是 C 语言在嵌入式领域应用很广,比如常见的驱动开发等与硬件直接打交道的领域,C++ 可以用于应用层开发,用户界面开发等与操作系统打交道的领域,特别是图形图像编程领域,几乎所有的高性能图形图像库都是用 C++ 实现的。
C++和java的对比:
Java 编程语言的风格十分接近 C++ 语言。继承了 C++ 语言面向对象技术的核心,舍弃了容易引起错误的指针,以引用取代;移除了 C++ 中的运算符重载和多重继承特性,用接口取代;增加垃圾回收器功能。引入了泛型编程、类型安全的枚举、不定长参数和自动装/拆箱特性。Java 不同于一般的编译语言或解释型语言。它首先将原始码编译成字节码,再依赖各种不同平台上的虚拟机 (JVM)来解释执行字节码,从而具有 “一次编写,到处运行”的跨平台特性。
相同之处:
C++
与 Java
均支持面对对象(Object Oriented
),支持类、继承、封装等常见的概念。
二者的不同之处:
Java 被编译成字节码,并运行在虚拟机 JVM 上,和开发平台无关,具有跨平台的特性;C++ 直接编译成可执行文件,是否跨平台在于用到的编译器的特性是否有多平台的支持。
Java 是完全面向对象的语言,所有函数和变量部必须是类的一部分。除了基本数据类型之外,其余的都作为类对象,包括数组。对象将数据和方法结合起来,把它们封装在类中,这样每个对象都可实现自己的特点和行为。而 C++ 允许将函数和变量定义为全局的。
由于Java 被编译为字节码,只要安装能够运行 Java 的虚拟机即可运行 Java 程序,因此 Java 程序具有很强的可移植性,具有 “一次编写,到处运行” 的跨平台特性;而 C++ 跨平台后,必须需要重新编译;
Java 语言具有垃圾回收机制,由系统进行分配和回收内存,编程人员无需考虑内存管理的问题,可以有效的防止内存泄漏,有效的使用空闲的内存。Java 所有的对象都是用 new 操作符建立在内存堆栈上,类似于 C++ 中的 new 操作符,但是当要释放该申请的内存空间时,Java 自动进行内存回收操作,Java 中的内存回收是以线程的方式在后台运行的,利用空闲时间。C++ 则需要程序员进行内存管理,当资源释放时需要程序员进行手动释放内存空间。
C++ 支持多重继承,允许多个父类派生一个类,虽然功能很强大,但是如果使用的不当会造成很多问题,例如:菱形继承;Java 不支持多重继承,但允许一个类可以继承多个接口,可以实现 C++ 多重继承的功能,但又避免了多重继承带来的许多不便。
C++ 支持方法与操作符的重载;但 Java 只支持方法重载,不支持操作符重载。
C++ 用 virtual 关键字标记的方法可以被覆盖;Java 中非 static 方法均可被覆盖,Java 中的方法默认均可以被覆盖。
C++ 可以直接操作指针,容易产生内存泄漏以及非法指针引用的问题;Java 并不是没有指针,虚拟机(JVM)内部还是使用了指针,只是编程人员不能直接使用指针,不能通过指针来直接访问内存,并且 Java 增加了内存管理机制。
C++ 标准库不提供 thread 相关接口;Java 的标准 SDK 提供 thread 类。
C++ 支持结构体(structure)与联合体(union),Java 不支持结构体(structure)与联合体(union)。
从应用场景来说, C++ 可以直接编译成可执行文件,运行效率比 Java 高。Java 目前主要用来开发 Web 应用。C++ 主要用在嵌入式开发、网络、并发编程、图形图像处理、系统编程的方面。
C++和python对比:
Python
是一种广泛使用的解释型、高级和通用的编程语言。Python
支持多种编程范型,包括函数式、指令式、反射式、结构化和面向对象编程。
不同之处:
从语言自身来说,Python 为脚本语言,解释执行,不需要经过编译,所有的 python 源代码都是经过 Python 解释器;C++ 是一种需要编译后才能运行的语言,在特定的机器上编译后运行。
Python 变量的作用域不仅局限于(while,for)循环内,在循环外还可以继续访问在循环内定义的变量;C++ 则不允许循环外访问循环内定义的变量。
Python 没有严格限定函数的参数类型和返回值类型;C++ 则严格限定函数参数和返回值的类型。
从运行效率来说,C++ 运行效率高,安全稳定。Python 代码和 C++ 最终都会变成 CPU 指令来跑,但一般情况下,比如反转和合并两个字符串,Python 最终转换出来的 CPU 指令会比 C++ 多很多。首先,Python 中涉及的内容比 C++ 多,经过了更多层,Python 中甚至连数字都是 object;其次,Python 是边解释边执行,和物理机 CPU 之间多了解释器这层,而 C++ 是编译执行的,直接就是机器码,编译的时候编译器又可以进行一些优化。
从开发效率来说,Python 开发效率高。Python 一两句代码就能实现的功能,C++ 往往需要更多的代码才能实现。
书写格式和语法不同,Python 的语法格式不同于其 C++ 定义声明才能使用,而且极其灵活,完全面向更上层的开发者,C++ 是严格静态类型声明语言,编译器在进行编译时必须经过严格的静态类型检查,如果发现类型检查错误,则中止编译;Python 为动态类型语言,我们在编写代码时不用指定变量的类型,只在执行时才会进行变量类型推导,确定变量类型。
C++ 可以直接用来操纵硬件,适合用来作为系统编程;Python 作为一门脚本语言,功能小巧而精湛,非常适合做工具开发和运维开发。