黑马程序员技术交流社区
标题:
Java、C++、C#的区别
[打印本页]
作者:
liletian2104
时间:
2014-6-20 09:58
标题:
Java、C++、C#的区别
谁能讲一下,Java、 C++ 、 C#的根本区别在哪里??
作者:
张益达
时间:
2014-6-20 10:28
JAVA 单继承 C#单继承 C++ 无限继承 JAVA 主要做网页 网站 C# 不是很了解 C++ 基本上啥都能做就看你的水平了
作者:
常乃伟
时间:
2014-6-20 11:03
一、关于声明和定义
在c++中一定要严格区分声明(不分配内存但在obj符号表中登记)和定义(分配内存)的区别,而在c#和java中我认为可以不用区分,就当没有声明这个概念,只有定义这个概念。原因是c++中的cpp文件都是要分别独立编译的,所以编译某个cpp时,是根本看不到其它cpp中有什么内容的,所以如果用到其它cpp中的符号(如变量),这些符号必须在这个要编译的cpp中声明,表示这个符号是“自己人”,只不过符号具体是什么内容以后链接时在其它cpp编译生成的obj文件中找。
二、关于引用
在c++中引用本质是个“常指针”,所以一定要在定义(分配内存)时初始化。在c#和java中引用本质是个“指针”,所以可以先定义,以后初始化。
c++中引用要用显示的“&”符号声明,而c#和java中不需要。
且在c++中类名就相当于一个变量名,如:Class A;语句中的A对象就相当于int a;语句中的a,A和a都是一个变量,代表一块内存。而在c#和java中,Class B;语句中的B是一个引用(指针),并不是一个变量,并不像int b;语句中的b,b直接代表变量所在内存的地址,而B直接代表的是指针的地址,它要拐个弯才能指向实际对象变量空间(当然实际写代码时不用想那么多)。
明白了上面所述区别后,看下面代码:string s1="abc"; string s2="def"; s1=s2;
在c++中,通过重载等号运算符,将s2中的内容复制到s1中,s1和s2代表的变量内存位置不变。
在c#和java中,会先丢弃s1指针所指的内存空间(垃圾回收自动执行),然后将s2引用的地址复制给s1引用,也就是s1和s2都存放了“abc”串所在空间的地址。
三、c++中的include;c++和c#中的using;java中的import
include就是把头文件内容原样复制到所在位置;using就是引入名字的复姓;import具有目录搜索(目前由于刚学习java,所以还不确定)和引入名字复姓两个功能。
重要的是,这三个语言都是怎么找到第三方写的类的(c++中找lib,c#找dll,java找class)。
c++中通过设置项目的“附加依赖项”或语句“pragma comment(lib,"..\\..\\ss.lib")”来把第三方写的代码加入到本项目中(就好像是自己写的cpp一样),但第三方的头文件中定义的各种符号的声明要通过include复制到需要的cpp中。编译某个cpp遇到不认识的符合在本cpp中的“符号表”中找。
c#中通过“添加引用”来把第三方dll库加入到自己所在的程序集中,以后要用到某个不认识的符合就到程序集中找。
java中(还不确定),直接通过import语句将对应目录下的或包的各种符号导入到程序集中(java中)
作者:
王振2014
时间:
2014-6-20 12:47
C#和Java很像的,他就是借鉴Java写出来的
作者:
L.sam
时间:
2014-6-20 15:39
java用途广,网页、手机小游戏、Android等的逻辑代码都可以。C++一般用于windows做桌面应用程序和接触底层的库文件。C#没接触过
作者:
peterbu
时间:
2014-6-21 08:29
常乃伟 发表于 2014-6-20 11:03
一、关于声明和定义
在c++中一定要严格区分声明(不分配内存但在obj符号表中登记)和定义(分配内存)的区 ...
解释的很详细啊!!!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2