ActionScript 3(简称AS3)与 c++ 都是面向对象的编程(OOP)语言,都具有OOP的特性如封装、继承、多态等。二者在语法上有许多相似之处,基本上学过C++之后再学习AS3感觉并不是特别吃力。

         但是二者也有着本质的区别,ActionScript3是脚本语言,也就是解释型语言,而C++是编译型语言。ActionScript3主要是基于ECMAScript4 Netscape Proposal标准,以AVM2作为其虚拟机,它的主要作用是在Flash内容和应用
程序
中实现交互性、数据处理以及其它许多功能。C++则是由最初的C语言演变而来,它的应用范围十分广泛,主要用于大型工程软件开发,主流的3种操作系统Windows,Linux,Unix,内核都是用C语言和汇编写的,上层高级特性是用C++写的。《魔兽世界》等几乎所有的网络
游戏
,百度搜索引擎,我们所用的大多数软件都是用C++写的(硬件也有很多用到C++的)。


         AS3是一种“纯”OOP语言,而C++只能说是具有OOP特性,但除此之外还具有其它特性(所以才灵活)。在AS3中找不到任何过程式代码,所有的实现都在类及其方法中实现,甚至找不到我们熟知的main函数。而C++则依然保留了面向过程的特性,依照Effective C++中作者的观点,C++主要由4个子语言组成,分别是C语言,面向对象语言,泛型编程语言以及C++标准模版库(STL)。


         以上主要从思想及本质上对比二者的区别(个人观点,部分参考网络),下面主要总结语法上的一些差别。


  一、ActionScript3语言基础


         1. AS3中所有的内置类型实际上都是对象,而我们俗称的“变量”实际上都是这些对象的引用名,虽然AS3也分值类型和引用类型,但是值类型的变量所指向的对象实际是一种不变对象。AS3中的值类型变量都是基本类型如int、uint、boolean、Number、String。而C++中的内置类型则都不是对象(因为没有方法)。


         2.AS3中没有指针这一概念,全部都是引用,而C++中拥有指针。在AS3中我们不必担心生成的类对象没有及时销毁,因为AS3的垃圾回收机制会帮助我们处理这些事情。而在C++中我们无时无刻不在与指针所造成的内存泄漏做斗争,这也就是为什么在C++的类定义中通常会有析构函数(~Fun())而在AS3中则没有。


         3. AS3程序中每条可执行语句之后可以不加分号(“;”,但是加上使代码更加易读),而C++中每条语句之后必须加上分号。


         4. AS3的基本类型较少,表示整数的只有int和uint,表示浮点数的只有Number,而不像C++里面整数有short、int、long,外加前面各一个unsigned,浮点则是float、double。AS3中的字符串中每个字符都是Unicode字符,但是它没有表示单个字符的变量(如char,但是后续可能会加上)。C++中则有char这个类型,并且字符串都是用char的数组来表示的。


         5. AS3中的数组是稀疏数组,不支持类型数组,即可以在同一个数组中存放不同类型对象的引用。而C++中的数组则是类型数组,里面存储的类型必须一致(当然可以存放基类类型指针指向派生类类型的对象)。


         6. AS3中变量的默认值类型比较多,特别的是null、NaN、undefined,通常Flash Player内置类和用户创建的类所产生的对象默认值都是null,而未定义类型的变量默认值是undefiened。Number类的默认值类型是NaN。在C++中则没有这么多类型。


         7. AS3中“==”运算符对于基元数据类型而言是比较两边值的大小,而对于复杂数据类型则是比较两边对象的引用是否相同,即使两边值相同,但是引用不同,则结果任然是false。C++中的“==”号则主要是直接比较值的大小(当然可以依靠重载运算符改变其比较方式)。在AS3中还拥有“===”运算符,它和“==”的区别在于它在比较时不会执行任何类型转换,只要类型不同则为false(对于数值类型例外)。在C++中则没有此运算符。


         8. AS3中的类型转换主要利用as运算符,在C++中则是利用“*_cast”进行类型转换。


         9. AS3中的delete关键字主要用来删除对象动态事例属性,C++中的delete则是收回指针所指向的动态分配的内存空间。


         10. 逻辑控制方面与C++基本无差别,无非是条件判断(如if、if else、if...else if...else)以及循环(如while、do-while、for),break、continue、switch等。区别在于AS3中还有for...in和for each...in,它们所枚举的一般是动态属性。AS3中的break和continue可以利用标签来控制程序执行流程。AS3的switch中的case分支中的值可以是任意类型,而C++中则只能是整数。


         11. AS3中函数有两种声明方法,分别是函数语句定义法和函数表达式定义法,他们的区别在此不赘述。而C++中则只有一种声明方式(当然可以考虑独立的函数或是类中的方法)。


         12. 在AS3中函数的参数全部是按照引用传入的,而C++中则分按值、按指针和按引用三种传递方式。


         13. 在AS3中函数是不能重载的(可以利用在方法的“()”中写入“...参数”来实现),C++中函数可以重载。


         14. AS3中没有内置的枚举类型(可以利用静态属性部分实现),C++中则有原生的enum。


         15. AS3程序的文件中有 “.fla”、“.swc”和“.as”文件,SWF文件是Flash文件格式,它里面放着一堆可以被FlashPlayer所理解的标签,容纳着媒体资源和ABC字节码(FlashPlayer运行时理解)。而FLA文件是FlashCS3工具使用的源文件后缀,里面有创作的图形、动画元件以及嵌入的媒体资源。AS文件则是类定义文件。C++中主要是与“.h”文件,“.cpp”文件打交道。


   


  二、ActionScript3面向对象编程


         1.AS3中定义一个类通常除了与“class”打交道,还有“package”。package主要用来定义包路径,一个Class如果想要被外部访问,必须放在一个package当中。而在C++中则没有package这一概念,但是需要引用其它文件中的类定义时会使用“include”,AS3中则没有。


         2. AS3中的访问控制除了有public、protected、private以为,还有internal,并且类定义中若不人为指定访问控制,则以internal默认,它表示“包内可访问”,即同一个包中的不同文件可以互相访问彼此中的类定义。


         3. AS3中Class分为动态类(加dynamic关键字)和密封类,动态类在运行时可以加入额外的属性和方法。C++中则只有密封类。


         4. 在AS3中导入其它类定义使用“import”关键字外加包路径,而C++中使用“#include”。


         5. 在继承中通常要改变来自父类中某个属性或者方法中的内容,但不改变名称,从而达到多态的效果,即所谓的“重写”,在AS3中可以通过关键字“final”来限制子类重写,而C++中则没有这一关键字(当然都可以利用private来限制游戏http://www.shengshiyouxi.com)。final还可以用来限制类被继承。AS3中重写时需要用“override”关键字,C++中也没有这一关键字。


         6.AS3中子当子类需要明确调用父类中的方法时,可以利用super语句,它可以看成是一个变量,直接持有父类的引用。


         7. AS3中没有对抽象类的原生支持,即关键字“abstract”(可以利用技巧实现),C++中则有“abstract”关键字。


         8. AS3中的接口类用“interface”表示,C++中则没有这一关键字(可以用纯虚函数实现)。


   


   


  三、ActionScript核心类


         1. AS3中的Array功能强大,拥有许多方法,类似于C++中STL里面的容器如vector。


         2. AS3中引入了强大的正则表达式,并且原生支持,C++中并无这一功能。


         3. AS3中处理XML就如同处理原生数据类型一样方便简单(严格执行E4X标准),C++则不然。


         4. AS3异常处理拥有finally,C++中则没有。


   


         FlashAS3中的其它内容,如Flash Player API、AS3视觉编程都是flashAS3针对FlashPlayer交互等功能所特别定制的,与C++没有可比性,在此不再赘述。

C++与AS3的更多相关文章

  1. [转]关于AS3 Socket和TCP不得不说的三两事

    磨刀不误砍柴工,让我们从概念入手,逐步深入. 所谓socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄.应用程序通常通过"套接字"向网络 ...

  2. as3正则表达式

    1.新建正则表达式,有两种方式var exp1:RegExp = new RegExp("ABCD","g");var exp2 = /ABCD/g;//g g ...

  3. [转]AS3 int uint Number

    转自:http://luhantu.iteye.com/blog/1910301 AS3 int uint Number 博客分类: AS3 flex number 类型  1) int 类可使用表示 ...

  4. AS3和js相互通信要点分析

    目标:在html页面里可以使用事件来影响到swf文件的内容,swf文件也可以影响html里js代码的内容 一.新建flash文件,用Flash CC试用版新建一个TextArea.fla的源文件,不添 ...

  5. 关于as3调用js报“null为空或不是对象”错误

    主要原因是:flash插件的object对象无ID属性. 顺便说下as3调用js的方法. as3引用: import flash.external.ExternalInterface; as3中调用 ...

  6. 在as3中使用protobuf

    在最近参与开发的adobe air项目中,前后端的通信协议从XML.JSON再到protobuf,最后选择protobuf原因,主要是前后端维护protobuf协议就行了,同时还可以利用IDE做一些编 ...

  7. [AS3.0] HTMLLoader与js交互

    HtmlLoader 的属性window是加载到 HTML 控件中的内容的全局 JavaScript 对象,通过这个对象能够方便的和页面js通讯. AS代码: import flash.html.HT ...

  8. [ActionScript 3.0] AS3.0和AS2.0的相互通信

    AS3和AS2之间的通信,最好的方式可能就是LocalConnection了. AS2向AS3发送数据,即AS2调用AS3的函数: as2.0代码(按钮上写的发送信息代码): on (release) ...

  9. AS3 从外部SWF中获取资源的方法(ApplicationDomain的使用)

    package { import flash.display.Bitmap; import flash.display.BitmapData; import flash.display.Loader; ...

  10. [AS3]as3画笔实例实现橡皮擦功能源代码

    [AS3]as3画笔实例实现橡皮擦功能源代码 //主容器 var main:Sprite = new Sprite(); main.mouseEnabled = false; addChild(mai ...

随机推荐

  1. Balsamiq Mockups registration code

    最近使用Mockups 进行页面原型设计,发现是未注册的,于是网上查询了下注册码,居然有效,在此记录下.    有需要的朋友也可以试试. Name:Rick Dong     Key:eNrzzU/O ...

  2. Delphi XE6 通过JavaScript API调用百度地图

    参考昨天的内容,有朋友还是问如何调用百度地图,也是,谁让咱都在国内呢,没办法,你懂的. 首先去申请个Key,然后看一下百度JavaScript的第一个例子:http://developer.baidu ...

  3. android 为TextView添加边框

    今天需要在TextView上面添加一个边框,但是TextView本身不支持边框,所以只能采用其他方式,在网上查询了一下,主要有三种方式可以实现1.带有边框的透明图片2.使用xml的shape设置3继承 ...

  4. Android 微信分享信息

    随着微信越来越火,越来越多的应用要求有分享到微信的功能.虽然有很多平台都帮集成有分享功能,比如友盟.但是个人觉得友盟集成的东西太多了,自己封装得太过分了,很多资源文件也要带进去,所以感觉不是怎么好,所 ...

  5. SSH25个命令 + 深入SSH端口转发细节

    OpenSSH是SSH连接工具的免费版本.telnet,rlogin和ftp用户可能还没意识到他们在互联网上传输的密码是未加密的,但SSH是加密的,OpenSSH加密所有通信(包括密码),有效消除了窃 ...

  6. wdos相关问题解答

    wdos系统自动分区的大小说明 wdOS系统提供了可自动分区和手工分区 自动分区适用大部分新手或对分区没有特的要求的人 手工分区适用老手或熟悉分区或有特别需求的人 具体用哪个,没多大区别,关键是看应用 ...

  7. NBA工资帽

    工资帽(Salary cap):在NBA,工资帽是最著名工资限制条款. 每年的"工资帽"是依据NBA前一年的总收入,然后取这个总收入的48%作为NBA球队工资总额. 再拿这48%的 ...

  8. Copy from chromium-dev!

    https://app.yinxiang.com/pub/gguangle0/chromium-dev 做了一些搬运工的活..............

  9. TCPDUMP详解(续)

    TCPdump抓包命令  tcpdump是一个用于截取网络分组,并输出分组内容的工具.tcpdump凭借强大的功能和灵活的截取策略,使其成为类UNIX系统下用于网络分析和问题排查的首选工具.  tcp ...

  10. 固定cell.imageView.image的大小

    cell.imageView.image的大小 会随着Cell的高度而变化,不同的图片显示的也不一样,在网上找了几种方法,简单方便的是下面这种: UIImage *icon = [UIImage im ...