Skip to main content
 首页 » 编程设计

Java和C++的区别杂记

2022年07月19日31txw1958

1.java中的作用域描述符(类比于C++是通过"."来实现,Java中"类名.静态成员名",C++中"类名::静态成员名"

2.java中子类中不能修改继承到的成员的权限,但是C++中是可以的。

3.java中接口中声明的函数前需要加public

4.static方法,java中通过"类名.方法名"直接调用,C++中是使用作用域描述符"::"

5.java中声明的abstract抽象类可以值实例化interface的部分成员方法。

6.java中子类对象赋值给父类(或者是N级父类)直接体现出多态,而C++中的虚函数才能体现出多态。

7.java和C++中的异常相对于C而言,C中若子函数返回错误,错误值需要层层向上传递,最终程序由用户控制结束。而异常可以直接结束,省去了上层函数层层判断。

8.java中除了8种基本类型外其它的都是引用数据类型,对象A=对象B,只是又对那片存储区多增加了一个引用而已,C++中应该是值传递的。

9.java中的protected权限表示:本包、其它包的子类内部可以访问,C++中的protected表示只有子类中可以访问。

10.java中只有单继承,C++中有多继承。

11.java中定义模板类的方式:AAA<T>,C++中定义模板类的方式:template<typename T> class AAA

12.若子类中复写了父类中的方法,但是还想调用父类中的方法,java中:super.父类方法(),C++中:Parent::父类方法().

13.java中不能像C/C++那样在类外定义全局变量,eg int a = 10; java中的操作都需要在类中。

14.java中无unsigned关键字,例如unsigned int a = 10; 编译不过。注意java中只有这8种基本类型,不存在与unsigned组合:boolean byte char short int long float double。java中的只有boolean和char是unsigned的。java不像C/C++那样进行普通变量的类型转换,例如java中char a=10; int b=-1; if (a > b) 是成立的。

15.C++中没有指明类成员的权限默认是private的,java中没有指明默认是default的(本包可以访问)。

16.java中没有析构函数(不用指定析构函数,~ClassName()指定编译也报错),C++中有析构函数。

17.C++中的静态成员变量必须要在类外初始化,而Java可以在类中定义时就初始化,普通成员变量也可以。

#include <iostream> 
using namespace std; 
 
class Stu { 
    static int a = 10; 
}; 
 
int main() { 
    return 0; 
} 
 
/* 
$ g++ -std=c++11 test.cpp -o pp 
test.cpp:9:17: error: ISO C++ forbids in-class initialization of non-const static member ‘Stu::a’ 
  static int a = 10; 
                 ^ 
ubuntu@ubuntu:~/Android_work/message_project_my$ g++ test.cpp -o pp 
test.cpp:9:17: error: ISO C++ forbids in-class initialization of non-const static member ‘Stu::a’ 
  static int a = 10; 
                 ^ 
*/

18.abstract关键字是java中的,C++中无此关键字,C++中使用纯虚函数来实现抽象类

class Human { 
public: 
    virtual void eating() = 0; 
}; 
 
// virtual表示要体现出多态。而Java中直接就体现出多态。 
// = 0;表示是纯虚函数,包含纯虚函数的类是抽象类。Java中没有=0这样的操作,abstract修饰成抽象类。

19.java中调用父类的构造方法使用的是super(), C++中使用的是初始化列表,例如: Man():Person(10)  

20.C/C++ 支持 #define/#ifdef 这类宏定义和编译预处理命令,但是Java不支持。

21.Java中的static关键字的含义与C中的完全不同了,C中是访问范围限制,放在堆中,具有相关属性。java中修饰为静态成员,不需要通过对象就可以访问。C++的也是,即具有同C的特性,若是类对象使用,也具有同java的特性。

22. C++中非静态成员函数可以调用static静态成员函数,但是static静态成员函数中不能调用非静态成员函数; static静态成员函数中只能访问类的static静态成员变量。


本文参考链接:https://www.cnblogs.com/hellokitty2/p/10663452.html