您的位置: 网界网 > 网络学院-技术开发 > 正文

Java与C++编程的不同(1)

2014年06月23日 16:55:57 | 作者:佚名 | 来源:51CTO | 查看本文手机版

摘要:副标题#e# 1. 数据类型和变量 C 中的变量类型与Java很相似。像Java一样,C 有int 和 double 类型。但是这些数字类型的取值范围是依赖于机器的。比如在16位系统上,例如运行DOS 或Windows 3.x的PC机上,int 是双字节(2-by...

标签
C++Java编程变量类型

1. 数据类型和变量

C 中的变量类型与Java很相似。像Java一样,C 有int 和 double 类型。但是这些数字类型的取值范围是依赖于机器的。比如在16位系统上,例如运行DOS 或Windows 3.x的PC机上,int 是双字节(2-byte)的,取值范围比Java的4-byte的int 要小很多。在这些机器上,如果 int 不够用的话,你需要使用长整型long.

C 有 short 和 unsigned 类型来更有效的存储数字。(我认为所谓有效是指更高的空间利用率。) 最好是尽量避免使用这些类型除非是空间利用的有效性对你的系统真的非常重要。

在C 中布尔型用 bool 表示,而不像在Java中用boolean.

C 中字符串类型用 string 表示。它与Java中的String 类型非常相似,但是,还是要逐一以下几点不同之处:

1. C 字符串存储ASCII 码字符,而不是标准码Unicode 字符

2. C 字符串是可以被修改的,而Java字符串的内容是不可修改的(immutable)。

3. 取子字符串的操作在 C 中叫做substr,这个命令s.substr(i, n) 从字符串s中取得从位置 i 始长度为n的子字符串。

4. 在C 中,你只能够将字符串与其它字符串对象相串联(concatenate),而不能够与任意的对象相串联。

5. C 中可以直接使用关系操作符 ==、 !=、 <、 <=、 >、 >= 来进行字符串比较,其中后面四个操作符是按字母顺序进行比较的。 这比Java中使用函数equals和compareTo来比较要方便很多。

2.  变量和常量

在C 中,本地变量的定义看起来与Java中相同,例如:

int n = 5;

实际上这正是C 和Java的一个重要不同之处。C 编译器不对本地变量进行初始化检验,所以在C 中很容易忘记初始化一个变量,这种情况下,变量的值该变量所占内存区域中刚好当前存在随机值。这显然是很容易产生程序出错的地方。

与Java一样, C 中类可以有数据域和静态变量。不同的是,C 中变量可以在函数甚至是类的外面定义,这些所谓的全局变量可以在程序的任何函数中被访问,因而不易被很好的管理。所C 中应该尽量避免使用全局变量。

在C 中,常量可以在任何地方被定义(记得在Java中,常量必须是类的静态数据static data)。 C 使用关键字 const 来定义常量,而Java中是 final。例如:

const int DAYS_PER_YEAR = 365;

3. 类C

中对类的定义与Java有些不同,这里是一个例子:一个C 版本的Point 类:

class Point /* C   */

{

public:

Point();

Point(double xval, double yval);

void move(double dx, double dy);

double getX() const;

double getY() const;

private:

double x;

double y;

};

这里几点重要的不同是:

1. C 的类定义中分为公共和私有部分,分别以关键字 public 和 private开始。而在Java中,每一个元素都必须标明 public 或 private;

2. C 中类的定义只包含函数的声明,真正的实现另外单独列出;

3. 访问函数(accessor methods)标有关键字 const ,表明这个函数不会改变本对象的元素值;

4. 类定义的结尾处有分号。

类中函数的实现跟在类的定义之后。因为函数是在类外面定义的,所以每一个函数的名字前面要加类名称作为前缀,并使用操作符双冒号::来分割类的名称和函数的名称。不改变隐含参数值(即当前对象的值)的访问函数用 const标明。如下所示是上面类定义中的函数的实现:

Point::Point() { x = 0; y = 0; }

void Point::move(double dx, double dy)

{

x = x   dx;

y = y   dy;

}

double Point::getX() const

{

return x;

}

123
[责任编辑:孙可 sun_ke@cnw.com.cn]