现在的位置: 首页 > 综合 > 正文

c++与JAVA区别:名字

2013年09月08日 ⁄ 综合 ⁄ 共 1594字 ⁄ 字号 评论关闭
    买了本C++ PRIMER 看。感觉C++比JAVA复杂多了,心理作用?

     总结总结C++与JAVA的区别,是自己学的更好。各位大能多多指点,毕竟我才是1年级新手。因为我大学学到的是机械,虽然学过谭浩强的C,但只是应付考试,大一考完就扔了,工作后直接学的J2SE , android ,工作之余简单学了点C。下面些的都使我看了c++ primer后自己的一些看法,没搞过C++的项目,有不对的地方希望大家指出来。

     这篇文章主要是想谈一谈 程序中标示符使用的问题。

     一,标示符使用

    刚开始看C++的时候感觉挺麻烦的,老得加很多头文件。在JAVA里,所有的方法,字段都在类里,类又以package划分,就跟计算机里资源管理器的文件目录似的,包里每一个文件一个public 类,类名与文件名一样,包里相同名字的类只能有一个。包名又有一套麻烦的命名规范,这样基本上就保证了绝对路径类的唯一性,哪怕是多个不同工程在一起。

这样的话,在某个地方使用类的时候,直接绝对路径+类名就可以了,JVM就可以找到你要得类。根据类,又可以找到类中的字段,方法。

     而C++跟JAVA这方面有很大区别。是我少见多怪了,。C++里某个地方某个地方使用一个标示符,那么在这个文件的使用的前面,一定要有相应的声明才行(源自C)。我不管你具体实现在哪,反正你得在这个文件的前面有声明。所以为了方便,也为了正确,就有了头文件,头文件里都是声明,在文件头将头文件包含进来,预编译的编译器将相应头文件里的内容完全复制到include 处,也就把 字段,方法,类。。的声明加进来了,后面就可以使用了。相当于编译器帮你把声明又在这里COPY了一份。(我瞎猜的,也不知道有这么一个头文件是不是这个原因)。编译的时候编译器到库文件的位置在找啊找啊找,找到名字一样的来使用。

例如 有一个叫Text 的类。 在java里,它就放在   com.lee 包里,使用的时候

 com.lee.Text text = new com.lee.Text(); 

就行了。这样JVM知道到那里找这个类了,程序员也知道在那可以看到这个类了。

而C++ 就得先将Text类的声明头文件包含进来,然后才能使用。

#include "Text.h"

Text text();

这样编译器可以找到相应的类了,我们也可以找到Text类的声明了,就在Text.h头文件里。但是具体实现在那里呢?? 为了可以方便找到具体实现,干脆就把具体实现写道Text.cpp里。这样就都能找到了,问题解决了,但就是感觉麻烦了点,没JAVA简洁,呵呵,板砖勿拍。

     二,命名空间。

     java就是前面说的,用包来解决所有问题,简单明了。而c++麻烦一些。C++用的是namespace。可以定义一些namespace将字段,方法,类等等放到namespace里,不同的namespace就跟java里面不同的包一样,可以有相同的名字。使用的是有通过路径来区分就行了。可操蛋的有两点,1是命名空间不是连续的,在java里说要找那个包太easy了,就是按路径找文件夹呗,这个文件夹里的文件,也就是类,都是这个包里的。可在c++里咋搞呢?比如说项目里面有一个命名空间ps,这个命名空间里到底有啥东西呢?咋找呢?命名空间是在头文件里圈了一处地盘,地盘里的都是命名空间里的。可我得把所有的头文件看个遍才知道ps里到底都有什么。

2是用了namespace还得把头文件包括进来,开始头转不过弯,有了命名空间了,那么也就是说东西到底在那已经知道了,那么还要头文件干什么呢?

比如:

ps::Text text();

完事,命名空间ps里的Text类嘛。可问题是不行,必须还得把头文件Text.h包含进来才行。

结合第一个问题,想了想,感觉C++的命名空间好像就是为了解决 同时包含多个头文件,结果头文件里名字冲突了的问题。不跟JAVA似得位置也确定了。

抱歉!评论已关闭.