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 ...
随机推荐
- Struts2中在Action里面向前端页面传值的方法总结
由于在Action中并不能直接诶访问Servlet API,但它提供了相关类ActionContext来访问HttpServletRequest.HttpSession和ServletContext, ...
- shell提示符显示git当前分支
编辑/etc/profile或者~/.bashrc 在行末添加如下内容 # 获取git当前分支 git_branch() { branch='' cd $PWD if [ -d '.git' ]; t ...
- Linux突然断电后文件丢失的问题
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://yuyongid.blog.51cto.com/10626891/168504 ...
- WPF按钮清空自带样式,以及透明按钮时,Grid的Background属性设置引起"点击"问题.
1.空样式按钮 <Style x:Key="EmptyButtonStyle" TargetType="Button"> &l ...
- wx.Dialog
wx.Dialog A dialog box is a window with a title bar and sometimes a system menu, which can be moved ...
- 获取枚举Name,Value,Description两种方法
using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.UI ...
- 图论+dp poj 1112 Team Them Up!
题目链接: http://poj.org/problem?id=1112 题目大意: 有编号为1~n的n个人,给出每个人认识的人的编号,注意A认识B,B不一定认识A,让你将所有的人分成两组,要求每组的 ...
- 垃圾回收算法简单介绍——JVM读书笔记<二>
垃圾回收的过程主要包含两部分:找出已死去的对象.移除已死去的对象. 确定哪些对象存活有两种方式:引用计数算法.可达性分析算法. 方案一:引用计数算法 给对象中加入一个引用计数器.每当有一个地方引用它时 ...
- 浅谈android的selector,背景选择器
shape和selector的结合使用 (2013-04-07 11:11:00) 转载▼ 分类: android 1.Shape (1)作用:XML中定义的几何形状 (2)位置:res/draw ...
- javascript中的部分函数应用
这篇文章写的很全面,不过也啰嗦:http://benalman.com/news/2012/09/partial-application-in-javascript/ 这篇文章是神级运用:http:/ ...