PersonalBank1
1.Java用包package来管理处存文件
2.C++中不可更改的函数用const,但Java中没有const,用final表示该函数不可重写
3.Java中函数声明与函数体不能分离(除抽象类,接口等)
4.cout与System.out.println(变量名 + “字符串”);
5.c++ 里面建立类的对象可以直接:类名 对象名(参数),而Java里面需要:类名 对象名 = new 类名(参数)
6.Java里是不用写什么math.h等头文件的,类库里都有。比如取整:Math.floor()
7.Java没有id(id);
,有this.id=id;
PersonalBank2
相比于第一个版本,增加了total变量
其余无变化
PersonalBank3
增加了Date类
1.C++ void record(const Date &date, double amount, const std::string &desc);
Java private void record(Date date,double amount,String desc){};
2.C++
namespace { //namespace使下面的定义只在当前文件中有效
//存储平年中某个月1日之前有多少天,为便于getMaxDay函数的实现,该数组多出一项
const int DAYS_BEFORE_MONTH[] = { 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365 };
}
Java
public final int DAYS_BEFORE_MONTH[] = { 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365 };
3.敲SavingAccount类时,利用Date方法总是报错,由于设置了void,没办法匹配?
PersonalBank4
与之前版本相比,增加了Accumulator类、Account类、CreditAccount类,SavingAccount类继承了Account类
Date类与之前一样
CreditAccount继承了Account,要重写show()函数,但Account中show()函数是由final修饰的
PersonalBank5
Date类中少了一个distance()函数,多了一个重载
int operator - (const Date& date) const {
return totalDays - date.totalDays;
}
Accumulator类与前一样
Account类变成了抽象类,其中多了deposit、withdraw、settle函数(C++中的虚函数)
SavingsAccount类中多了deposit、withdraw、settle
主函数C++与Java变化对比
cin >> cmd;
switch (cmd) {
case 'd': //存入现金
cin >> index >> amount;
getline(cin, desc);
accounts[index]->deposit(date, amount, desc);
break;
case 'w': //取出现金
cin >> index >> amount;
getline(cin, desc);
accounts[index]->withdraw(date, amount, desc);
break;
case 's': //查询各账户信息
for (int i = 0; i < n; i++) {
cout << "[" << i << "] ";
accounts[i]->show();
cout << endl;
}
break;
case 'c': //改变日期
cin >> day;
if (day < date.getDay())
cout << "You cannot specify a previous day";
else if (day > date.getMaxDay())
cout << "Invalid day";
else
date = Date(date.getYear(), date.getMonth(), day);
break;
case 'n': //进入下个月
if (date.getMonth() == 12)
date = Date(date.getYear() + 1, 1, 1);
else
date = Date(date.getYear(), date.getMonth() + 1, 1);
for (int i = 0; i < n; i++)
accounts[i]->settle(date);
break;
}
cmd = (char)System.in.read();
switch (cmd) {
case 'd': //存入现金
index = in.nextInt();
amount = in.nextDouble();
desc = in.nextLine();
accounts[index].deposit(date, amount, desc);
break;
case 'w': //取出现金
index = in.nextInt();
amount = in.nextDouble();
desc = in.nextLine();
accounts[index].withdraw(date, amount, desc);
break;
case 's': //查询各账户信息
for (int i = 0; i < n; i++) {
System.out.print("[" + i + "] ");
accounts[i].show();
System.out.println();
if(i<(n-1)) {System.in.read();}
}
break;
case 'c': //改变日期
day = in.nextInt();
if (day < date.getDay())
System.out.print("You cannot specify a previous day");
else if (day > date.getMaxDay())
System.out.print("Invalid day");
else
date = new Date(date.getYear(), date.getMonth(), day);
break;
case 'n': //进入下个月
if (date.getMonth() == 12)
date = new Date(date.getYear() + 1, 1, 1);
else
date = new Date(date.getYear(), date.getMonth() + 1, 1);
for (int i = 0; i < n; i++) {
accounts[i].settle(date);
if(i<(n-1)) {System.in.read();}
}
break;
PersonalBank6
与之前版本相比较,仅主函数不同