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. jQuery插入节点的方法

    注:摘自<锋利的jQuery(第二版)> append() 向每个匹配的元素内部追加内容:  HTML代码:<p>我想说:</p>jQuery代码:$(" ...

  2. 论山寨手机与Android联姻 【2】手机OS成为核心

    手机凭借通话和短信这两项基本功能,积累了用户,开拓了市场.但是用户的需求是永无止境的,对于手机制造商来说,紧跟用户需求,拓展手机功能,是机会也是挑战. 1988年第一款数码相机,在日本上市.数码相机的 ...

  3. [置顶] 与小伙伴共勉的java有关jvm的知识(一),小鸟尽量写得详细哦,欢迎讨论,谢绝喷子

    JAVA运行在JVM之上,JVM的运行状况会对程序产生很大的影响,因此了解一些JVM的东东,对于编写稳定的,高性能的java程序至关重要.这是JVM的规范中定义的标准结构图: 以上标准是JVM标准中定 ...

  4. 网易云课堂_C语言程序设计进阶_第一周:数据类型:整数类型、浮点类型、枚举类型_1计算分数精确值

    1 计算分数精确值(10分) 题目内容: 由于计算机内部表达方式的限制,浮点运算都有精度问题,为了得到高精度的计算结果,就需要自己设计实现方法. (0,1)之间的任何浮点数都可以表达为两个正整数的商, ...

  5. Effective C++笔记 55条编程法则

    1.  视C++为一个语言联邦 C++高效编程守则视状况而变化,取决于你使用C++的哪一部分. 2.  尽量以const,enum.inline替代#define 1) 对于单纯常量,最好以const ...

  6. Oracle Bills of Material and Engineering Application Program Interface (APIs)

    In this Document Goal   Solution   1. Sample Notes for BOM APIs   2. Datatypes used in these APIs   ...

  7. 我的小前端 (1)—— 安卓机和ios机的区别

    没有什么特别新技术,就是记录我做移动端遇到的问题 2016-02-16 微信,支付宝和APP都会遇到这些问题 一.安卓机和ios机的区别 1.常用 <head>        <me ...

  8. bat文件自动编译InnoSetup脚本

    今天想制作一个bat文件,打包多个innosetup脚本,参考链接:http://www.cnblogs.com/joean/p/4870428.html 流程: 新建文本文档,将.txt改为.bat ...

  9. SSH框架整合 日志处理Spring结合 log4j、slf4j

    1. 加入log4j和slf4j的jar包 2. web.xml: <context-param> <!--log4j配置地址 --> <param-name>lo ...

  10. VS中C++对象的内存布局

    本文主要简述一下在Visual Studio中C++对象的内存布局,这里没有什么测试代码,只是以图文的形式来描述一下内存分布,关于测试的代码以及C++对象模型的其他内容大家可以参考一下陈皓先生的几篇博 ...