Java和C++的区别杂记
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静态成员变量。
posted on 2019-04-06 23:35 Hello-World3 阅读(138) 评论(0) 编辑 收藏 举报