关于c++跟java区别的几个总结

之前c++,最近java有点混乱,总结一下:

1.在写java程序的时候会发现,假如你自己写了一个类class A{。。。},这个时候你要实例化,必须new一个;但是在c++里面就不用,c++中你可以直接声明A a;

为何:

  a.java里面所有变量都是引用(除了基本类型),引用就相当于一个指针,因此你必须要new,不然没法使用;当然在c++里面,指针可以光声明,扔在那里不new,你用的时候还是要new的,java编译器在安全方面做出了优化。

  b.c++里面,A a;这句运行时,会自动调用默认构造函数,给你构造一个出来,这是一个实例对象,不是引用,A中的field是有值的,不过这个值可能是一个你不想要的。

2.关于RTTI的实现机制,java跟c++是不同的,但原理是一样的:

  a.java如果实现RTTI,很简单,java的每个类都生成一个class文件。比如现在有一个基类shape,其子类有circle,square等。有一个vector i,在java中,vector如果没有被泛型化,可以放入任何object。这时你可以把circle,square都放进去,upcasting。取出来的时候,需要downcasting回shape,比如(shape)i[0],这时在java中会进行RTTI,但是这种括号形式的造型,在c++中不会进行RTTI,只会被强制转换为()中类型。那RTTI如何进行呢,因为每个类都是一个class,被加载到内存中后,字节码是不同的,因此可以方便进行RTTI。

  b.c++中,也有RTTI,在dynamic_cast跟typeid中进行。很容易推测,要进行RTTI就要需要知道类的信息,在java中有Class类记录类型信息,其实在c++中也有type_info,(个人认为这两个东西,本质上是一样的),只是很少人用到。因此,在c++中,RTTI的进行依据是type_info。

  c.别的还木有看,只看了dynamic_cast的运作原理:dynamic_cast是类型转换,upcast比较好理解,但downcast,这里如何操作的呢?当类中存在虚函数时,编译器就会在类的成员变量中添加一个指向虚函数表的vptr指针,每一个class所关联的type_info object也经由virtual table被指出来,通常这个type_info object放在表格的第一个slot。当我们进行dynamic_cast时,编译器会帮我们进行语法检查。如果指针的静态类型和目标类型相同,那么就什么事情都不做;否则,首先对指针进行调整,使得它指向vftable,并将其和调整之后的指针、调整的偏移量、静态类型以及目标类型传递给内部函数。其中最后一个参数指明转换的是指针还是引用。两者唯一的区别是,如果转换失败,前者返回NULL,后者抛出bad_cast异常。

转载于:https://www.cnblogs.com/xiayou/p/4236841.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/406468.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

命令行编译c#源程序

开发环境:WinXP VS2010(C#) using System;public class Test {public static int Main(string[] args){string str DateTime.Now.ToString("HH:mm:ss"); // 时分秒(各占两位)Console.WriteLine("当前时间:{0}", str);return 0;} …

来自山西机器人乐队_格力:中国第一支工业机器人乐队重磅亮相

原标题:格力:中国第一支工业机器人乐队重磅亮相一直以来,格力的董明珠可谓是媒体的关注焦点,前有董小姐与雷军的10亿赌约,后有格力进军手机行业,现在格力更是涉足汽车以及芯片行业,而格力的智能…

Samba将Linux集成到Windows网络

(一)Samba是一个与Windows操作系统兼容的文件与打印共享服务器,通过在Linux服务器上配置Samba,可以使Linux系统集成到Windows网络中。在网络中,用户可以使用多种方法实现数据共享,例如常见的Web服务、FTP服务。使用这两种网络服务的好处是:它…

Vue、Element-ui项目中如何使用Iconfont(阿里图标库)

我们使用element-ui、vue开发网站的时候,往往图标是起着很重要的作用。 1.傻瓜式引用:由于这种方法及其简单 省去了很多繁琐的步骤, a.引入项目生成的,图标地址。 b.使用 推荐使用这种,详情请看文档!&…

Unity与Android交互

转载自 http://www.narkii.com/club/thread-320335-1.html 这段时间在研究嵌入sdk,途中遇到不少问题和坑,在这就不一一说了。嵌入sdk是比较常见的吧,如接入广告啊, 新浪的分享...... 这些都需要接入sdk的。(这些我在这…

自定义overflow:auto的滚动条样式

自定义overflow:auto的滚动条样式

angular路由传递参数_Angular路由——在路由时候传递数据

有3种方式1、在查询参数中传递数据2、在路由路径中传递数据定义路由路径时就要指定参数名字,在实际路径中携带参数。3、在路由配置中传递数据一、在查询参数中传递数据第一步:修改模版中商品详情链接,带一个指令queryParams商品详情效果&…

python自动登录百度空间

参考: http://blog.163.com/sunzs20113126/blog/static/3706880920120105131652/ 开发环境:Fedora12 Python2.6.2 #!/usr/bin/python # coding: GBKimport urllib,urllib2,httplib,cookielibdef auto_login_hi(url,name,pwd):url_hi"http://passport.baidu.c…

SQL WITH NOCHECK 和 CLUSTERED | NONCLUSTERED

ALTER TABLE [dbo].[atr_cont_b] WITH NOCHECK ADD CONSTRAINT [PK_atr_cont_b] PRIMARY KEY CLUSTERED ( [id_cont_b] ) ON [PRIMARY] GO WITH NOCHECK: 指定表中的数据是否用新添加的或重新启用的 FOREIGN KEY 或 CHECK 约束进行验证。如果没有指定,对于新约…

PHP 文件上传全攻略

PHP文件上传功能一般都是大家使用事先封装好的函数,要用的时候直接使用已封装的函数就完了,但有时候不能使用封装函数,还真不大能记住PHP的上传相关的东西,在此做个总结,以备后用。1.表单部分 允许用户上传文件&#x…

JS事件-鼠标滚轮事件

JS事件-鼠标滚轮事件 vue 监听滚轮滚动事件

java语言程序设计教程翁恺第二版课后答案_《JAVA语言程序设计教程(第2版)/翁恺 肖少拥》翁恺,肖少拥著【摘要 书评 在线阅读】-苏宁易购图书...

第1章 Java语言概述1.1 Java的历史1.2 Java程序运行环境与特点1.2.1 跨平台(Cross Platform)/可移植性(Portablc)1.2.2 运行效率1.2.3 稳 定1.2.4 简 单1.2.5 动 态1.3 面向对象的基本概念1.3.1 对 象1.3.2 面向对象1.3.3 类1.4 面向对象程序设计的…

Python网页抓取、模拟登录

From: http://www.cnblogs.com/bboy/archive/2010/10/29/1864537.html 用python抓取网页是非常简单的事,简单的几行代码就可以解决。。。这里稍微记录一下 需要引用的包有主要是 urllib2,urllib也可以引入,具体 看代码 #--------------------…

深入分析Flex [Bindable] (总结)

[Bindable]大概又是Flex用得最多的元数据了。刚开始用用确实好简单,效率真是没的说。不过这几天用着却碰到了些问题,我自己搜集了些资料,想着有必要在blog里总结一下吧。啥是元数据(metadata)知道就跳过吧。今天不晓得…

爬取IMDBTOP250

在网上看到有人利用pythonbeautifulsoup爬取豆瓣Top250 试着自己模仿这个做了个爬取IMDB的, 可惜只能爬取到11个。 后来检查了超久, 才发现, soupBeautifulSoup(contents)这里,内容不完整,只能到11个电影为止。 代码如…

Vue Video.js播放m3u8视频流格式(video+videojs-contrib-hl)

Vue Video.js播放m3u8视频流格式(videovideojs-contrib-hl) videojs中文文档详解 Vue.js中this.$nextTick()的使用 videojs画中画小窗口播放问题?

apache mysql python win10_Win10 MySQL-python

在Windows 下调试 Python 还是挺麻烦的.通过PyCharm 来安装个MySQL-python 的库都搞了大半天.分别尝试 1.2.3,1.2.4和1.2.5都有不同的错误.需要解决的问题就是这个:“Cannot open include file: config-win.h: No such file or directory” while installing mysql-python"…

IT宅男们,有没有什么技术让你觉得相见恨晚?

无意中想起SQLite,于是发起了这么一个话题,感谢各位朋友的参与,我把大家的话收集一下,放在这里。 sshg PY算一个吧。当初看了一个下午就决定ditch Perl了。Haskell算另一个吧。看到type class的时候,也是怦然心动。不…