其实无论是C++还是Java,都是面向对象的语言,有很多相似的特性:抽象、继承、封装、多态、代码的可重用性等等,在语法和概念上也极其相似。也有一些区别:C++是编译型的高级语言而Java是解释性的高级语言,C++拥有更快的编辑和执行速度,而Java也拥有着兼容性良好的优势,C++更适用于底层开发方面,Java更适用于网络编程方面,两种语言各有所长。在一些语法结构和对象的处理上也有所不同,而且Java是一门完全的,纯粹的面向对象语言,所有东西都必须放在类里面,所有的Java程序都是由类组成,所以不存在全局函数,枚举,联合,结构等等。在C++中,main方法不属于任何一个类,还可以在类外再定义另外的函数。C++保留了很多C的概念,所以C++并不算是严格意义上的面向对象,更像是面向对象和面向过程的结合体。也因此C++更加灵活,而Java更加严谨。
一、类
Java是完全面向对象的语言,所有函数和变量部必须是类的一部分。除了基本数据类型之外,其余的都作为类对象,包括数组。对象将数据和方法结合起来,把它们封装在类中,这样每个对象都可实现自己的特点和行为。而c++允许将函数和变量定义为全局的。此外,Java中取消了c/c++中的结构和联合,消除了不必要的麻烦。Java与C++在类定义和类方法的定义上有较大的区别:
Java中没有独立的类声明,只有类定义,类方法在C++中被称为成员函数
C++:
class SavingsAccount { //储蓄账户类
private:
int id; //账号
double balance; //余额
double rate; //存款的年利率
int lastDate; //上次变更余额的时期
double accumulation; //余额按日累加之和
public:
SavingsAccount(int date, int id, double rate);
//存入现金
void deposit(int date, double amount);
};
SavingsAccount::SavingsAccount(int date, int id, double rate)
: id(id), balance(0), rate(rate), lastDate(date), accumulation(0) {
cout << date << "\t#" << id << " is created" << endl;
}
void SavingsAccount::deposit(int date, double amount) {
record(date, amount);
}
Java:
public class SavingsAccount {
private int id; //账号
private double balance; //余额
private double rate; //存款的年利率
private int lastDate; //上次变更余额的时期
private double accumulation; //余额按日累加之和
public void deposit(int date, double amount) {
record(date, amount);
}
public SavingsAccount(int date, int id, double rate) {
this.id=id;
balance=0;
this.rate=rate;
lastDate=date;
accumulation=0;
System.out.println(date+"\t#"+id+" is created"+"\n");
}
}
区别:
- Java所有的方法都是在类中定义的,而C++可以在类外定义函数
- C++中有作用域范围运算符"::",而Java利用分隔符"."
- Java与C++在类定义方面就只有有无";" 的区别
二、静态属性与方法
C++:
class SavingsAccount { //储蓄账户类
private:
static double total; //所有账户的总金额
public:
static double getTotal() { return total; }
};
Java:
public class SavingsAccount {
private static double total;//所有账户的总金额
public static double getTotal() {return total;}
区别:
- 对于c++来说:
1.全局静态变量或者局部静态变量可以让它们相应作用域中的“用户”来使用;
2.类中的静态成员变量和静态成员函数可以用类名访问或者用对象访问(如果权限允许的话),而且其静态成员变量仅能在类外初始化 - 对于Java而言,static仅体现在类的成员变量和方法上。用法同C++,但是其初始化在类内部完成。static方法是类方法,但可以被所有对象所访问
三、字符串对象数组
C++:
int main() {
SavingsAccount accounts[] = {
SavingsAccount(date, "S3755217", 0.015),
SavingsAccount(date, "02342342", 0.015)
};
const int n = sizeof(accounts) / sizeof(SavingsAccount); //账户总数
//11月份的几笔账目
accounts[0].deposit(Date(2008, 11, 5), 5000, "salary")