C与C++的区别
1. C中没有类,但是C中有struct和union,并且C++扩展了这二者的意义,在C++当中其与类相似,只是默认的访问控制是public的。
2. C++中有引用类型,C中并没有。
3. C并不支持函数的重载,所以在C中没有办法定义两个函数名与返回类型相同但是参数类型不同的函数。
4. 操作符重载是C++特有的。
5. 流操作符>>和<<C++特有的。
6. 继承、虚函数都是C++中的特性。
C++与Java的区别
1. Java编译成字节码运行在JVM上,C++需要编译成二进制代码后才能运行。Java在不同的平台(如Windows和Linux)上只需要编译一次,即可以运行在不同的平台,C++的代码需要针对不同的平台进行编译后才能运行。
2. Java不支持操作符重载、强制类型转换,C++支持这些;
3. C++支持多继承,并且有多种继承方式(public、protected、private),而Java只支持单继承,并且其继承方式与C++中的public继承类似。
4. Java中对接口提供了直接的支持,C++中没有接口定义,可以用纯虚类实现。
5. Java中所有类的声明与定义都是在一起的。C++中类的声明与定义可以分开。并且如果把成员函数的声明与定义放在一起,则默认其是inline函数。
6. C++中成员和成员函数的默认访问控制符是private,默认的继承方式也是private;Java中的默认访问控制是package;
7. C++中有动态内存分配,可以使用C的方式(malloc和free)的方式,以及new和delete的方式。Java使用内存回收机制,无需程序员关心内存分配的情况。
8. C++通过提供指针的方式可以对内存直接进行操作,Java中没有指针,不可以直接访问物理内存。
9. Java中的数组是原生类型,C++中的数组是伪数组。
10. C++中只有被virtual修饰的方法才需要进行运行时动态绑定,而Java中除了static、final、private修饰的方法外,都执行动态绑定。
11. C++中有拷贝构造函数,并且在下面三种情况下会自动调用:
a) 用一个对象初始化另一对象
b) 对象作实参进行函数调用
c) 对象作函数的返回值
12. C++中类的初始化与Java中不同,在C++中有“基类与成员初始化列表”,首先按照继承顺序调用基类的构造函数,然后按照声明顺序调用成员的构造函数。而Java的作法是,
a) 静态变量初始化
b) 静态初始化块(Java)
c) 调用基类的构造函数构造基类对象
d) 实例变量的初始化
e) 构造函数的其余部分
13. Java中函数的入栈方式是从左到右,逐个计算表达式的值并逐个入栈,即计算一个入一个。C++中会将所有的参数表达式都计算完成后再把参数入栈。【这一点C++标准并没有规定,不同的编译器可能会根据优化原则作不同的处理】