从C/C++到Java(三)

1. Java中对象的创建都是通过new操作符,而在C++中显然没有必要,你可以还通过定义一个实例来创建一个对象。

2. static在Java和C,C++中的意思差别挺大:
(1) 在Java中用它指明一个类成员是先于类而存在的,即可以不定义一个类的实例就可以直接使用。
(2) 在C++中有些复杂,第一个意思和Java类似,即可以不定义实例就使用类的成员,第二个意思是static成员可以直接继承到子类的作用域中,第三个意思是类定义中的static数据成员并不在类中定义,而且该成员并不属于该类,该类的实例共享同一个static成员。
(3)在C中,static的意义往往让人困惑。其实C中的static不外乎有两种作用,一种是限制存储域,一种是限制作用域。它用于函数时表示该函数是定义在该文件中的,外面的不能调用,当它用于局部变量时,它限制局部变量的存储域,让局部变量每次存取都维持上一次的值,当它作用于全局变量时,它限制该全局变变量只在其定义的文件中有效。

3. Java和C++都可以在运行时决定类型,C++是用typeid,而Java是用instanceof。

4. Java中的abstract和C++的virtual还不太相同。abstract类是不能有实例的,只能用来继承,abstract方法没有实体,它必须在所有子类中被覆盖(override)。上面的abstract方法在C++中被称做pure virtual,virtual方法在C++中的意思比Java中的abstract方法要复杂得多,virtual方法可以在各个类中定义,最后使用时调用哪个是动态决定的。再多说一句,C++中的基类的析构函数都必须是virtual的,而构造函数必须不能是virtual类型。

5. Java中没有运算符重载,虽然C++的运算符重载可以产生一些很好的代码,但是掌握它的使用也是要花一些代价的。

6. Java中没有模板,不过Object可以代为完成这个功能。因为Object是所有类的父类,所以它可以用来作为通用类,换句话说,在某种程度上完全可以当做模板。