关于C++与Java语言中的差别
首先在改了银行管理系统c++语言版的代码后,对c++与java的语言语法又有了一个重新的认识。在拿到一个完全不熟悉的代码群后,在两种语言中相互转换。我大概总结出以下几点感受
语言方面
1.java中不含指针
而c++中存在各种指针,c++中常用的有常量指针,指向指针的指针,以及对指针取地址操作。
2.关于基本的语言转换
c++中const常量对应java中的final;
c++中io流在java中改为System类输出;
c++中int main函数在java中改为public static void main(String[] args);
最后就是c++中声明类方法时候的差异:
这是c++中的声明方式:
private:
int year; //年
int month; //月
int day; //日
int totalDays; //该日期是从公元元年1月1日开始的第几天
java中必须每一个成员前面都声明属性
private int year;
private int month;
private int day;
private int totalDays;
类与构造方面
首先,在构造函数的基本形式上,C++和Java是基本一致的,都要声明为共有,都没有返回值,函数名都要与类名保持一致。
在Java中我们有两个地方会用到委托构造的机制,一个是当一个类中存在多个构造函数的时候,我们往往喜欢利用参数少的构造函数来协助完成参数较多的构造函数。
1.传参方式
在java中,创建一个类对象,一般是需要new一个东西出来,这是因为他使用一个对象的本质是指针类似。而在c++中则只需要声明一下,就创建了一个类,如果在c++中用new,则是需要用类的指针接收。
我们的授课老师曾经说过,java中新创建对象必须以new为作为标志,而new前面的只是对象的引用。就相当于一个引用作为一个遥控器控制一台电视机。
如果追究到底的话其实不存在传参方式的问题,两者传参方式都一样,只不过java中的变量一般都是引用或者叫做指针,而c++中的变量就是变量。
如下段为例
accounts[0].deposit(Date(2008, 11, 5), 5000, "salary");
accounts[1].deposit(Date(2008, 11, 25), 10000, "sell stock 0323");
//12月份的几笔账目
accounts[0].deposit(Date(2008, 12, 5), 5500, "salary");
accounts[1].withdraw(Date(2008, 12, 20), 4000, "buy a laptop");
accounts[0].deposit(new Date(2008, 11, 5), 5000, "salary");
accounts[1].deposit(new Date(2008, 11, 25), 10000, "sell stock 0323");
//12月份的几笔账目
accounts[0].deposit(new Date(2008, 12, 5), 5500, "salary");
accounts[1].withdraw(new Date(2008, 12, 20), 4000, "buy a laptop");
2.作用域
c++与java两者创建类的方法一般不同,用正常方法创建出来的c++类,是个普通变量,如果我们在另一个类A中有这样的成员变量类B,则在类A是不能够访问类B的私有成员C的,即使用选择操作符B.C是不行的。因为C++默认是private,而java中用默认的声明方法,我们是可以在类A中通过类B去访问类B的成员变量的。
还有一点就是内部类的问题,c++中不可以用外部类去操作内部类的变量,内部类也不能操作外部类的变量,两个类没有逻辑上的关系,只有声明域的关系。而java不同,java因为内部使用了一种静态方法的机制,使得两个类之间产生联系。
java中定义了包的定义,无论几个类,只要他们在一个包中,可以在类中相互访问,这样方便了许多,而结果也是失去了一定的封闭性。
3.继承
c++支持多重继承,这是c++的一个特征,它允许一个类有多个直接基类。多重继承功能很强,但使用复杂,而且会引起许多问题。Java不支持多重继承,但允许一个类继承多个接口(extends+implement),实现了c++多重继承的功能,又避免了c++中的多重继承带来的问题。
4.java中this指针
指的是访问类中的成员变量,用来区分成员变量和局部变量(重名问题)。
值得注意的是:
1.this() 不能使用在普通方法中 只能写在构造方法中
2.必须是构造方法中的第一条语句