C++与AS3
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的更多相关文章
- [转]关于AS3 Socket和TCP不得不说的三两事
磨刀不误砍柴工,让我们从概念入手,逐步深入. 所谓socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄.应用程序通常通过"套接字"向网络 ...
- as3正则表达式
1.新建正则表达式,有两种方式var exp1:RegExp = new RegExp("ABCD","g");var exp2 = /ABCD/g;//g g ...
- [转]AS3 int uint Number
转自:http://luhantu.iteye.com/blog/1910301 AS3 int uint Number 博客分类: AS3 flex number 类型 1) int 类可使用表示 ...
- AS3和js相互通信要点分析
目标:在html页面里可以使用事件来影响到swf文件的内容,swf文件也可以影响html里js代码的内容 一.新建flash文件,用Flash CC试用版新建一个TextArea.fla的源文件,不添 ...
- 关于as3调用js报“null为空或不是对象”错误
主要原因是:flash插件的object对象无ID属性. 顺便说下as3调用js的方法. as3引用: import flash.external.ExternalInterface; as3中调用 ...
- 在as3中使用protobuf
在最近参与开发的adobe air项目中,前后端的通信协议从XML.JSON再到protobuf,最后选择protobuf原因,主要是前后端维护protobuf协议就行了,同时还可以利用IDE做一些编 ...
- [AS3.0] HTMLLoader与js交互
HtmlLoader 的属性window是加载到 HTML 控件中的内容的全局 JavaScript 对象,通过这个对象能够方便的和页面js通讯. AS代码: import flash.html.HT ...
- [ActionScript 3.0] AS3.0和AS2.0的相互通信
AS3和AS2之间的通信,最好的方式可能就是LocalConnection了. AS2向AS3发送数据,即AS2调用AS3的函数: as2.0代码(按钮上写的发送信息代码): on (release) ...
- AS3 从外部SWF中获取资源的方法(ApplicationDomain的使用)
package { import flash.display.Bitmap; import flash.display.BitmapData; import flash.display.Loader; ...
- [AS3]as3画笔实例实现橡皮擦功能源代码
[AS3]as3画笔实例实现橡皮擦功能源代码 //主容器 var main:Sprite = new Sprite(); main.mouseEnabled = false; addChild(mai ...
随机推荐
- Swift笔记2
1.元组类型 let cat =(age:4,weight:2,cocle:"black",beauty :true) if(cat.beauty){ printf("我 ...
- html5介绍
html5与html4的区别 (h5 and h4) 什么是OPOA 1, 浏览器对h5的支持情况 2, 历史 --- h5 2004年,whatwg 提出 w ...
- InstallShield 工程类型MSI 使用过程中碰到的问题及解决方法。
原文 http://www.cnblogs.com/daocaorenbx/p/InstallShield.html 一.安装完 桌面创建IE快捷方式: 1. install script可以直接建 ...
- ckeditor编辑器在java项目中配置
一.基本使用: 1.所需文件架包 A. Ckeditor基本文件包,比如:ckeditor_3.6.2.zip 下载地址:http://ckeditor.com/download 2.配置使用 A.将 ...
- cdoj 791 Frozen Rose-Heads
//本来想做白书上一题 结果发现又要二染色 又要dp的 想了两个小时没想通 然后做了个傻逼题安慰自己 解:不多说,就是递归到叶节点,然后回来的时候在解决子树和直接删边的代价中间取个最小值 #inclu ...
- Struts2之自定义局部类型转换器、全局类型转换器
Struts2自定义类型转换器分为局部类型转换器和全局类型转换器 (1)局部类型转换器 如果页面传来一个参数reg.action?birthday=2010-11-12到后台action,然后属性用 ...
- AndroidUI 布局动画-为布局添加动画
除了可以为视图添加动画以外,还可以为视图的布局添加动画: <RelativeLayout xmlns:android="http://schemas.android.com/apk/r ...
- JavaScript-1.最简单的程序之网页弹出对话框,显示为Warning---ShinePans
代码: <html> <head> <meta http-equiv="content-type" content="text/html;c ...
- 《think in python》学习-6
think in python 有返回函数 我们使用过的内置函数中,有一部分会返回结果,比如 math的 返回值 我们写一个有返回值的函数,计算给定半径的圆的面积,例如这个: def area(rad ...
- C++虚基类的作用
虚基类的作用 当一个基类被声明为虚基类后,即使它成为了多继承链路上的公共基类,最后的派生类中也只有它的一个备份.例如:class CBase { }:class CDerive1:virtua ...