Freebasic的作用_第1页
Freebasic的作用_第2页
Freebasic的作用_第3页
Freebasic的作用_第4页
Freebasic的作用_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Freebasic能用来做什么?仁都见仁,智者见智。以下是我个人肤浅的理解1、Freebasic比vba更适合跟硬件打交道。2、Freebasic的dll可以直接被python和aauto等动态语言调用。需要性能的地方用Freebasic,可以显著提高性能。当然这只是针对不想学c/c+的人而言。3、Freebasic可以编译成原生的64位。如果使用office64位,那么可以用freebasic编写64位的dll供vba调用。注:Freebasic不易用。个人喜好,仅供参考,急于求成者,慎入一、Freebasic的数据类型:类型范围大小冬瓜汤备注说明指针类型指针类型Ptr,Pointer数据指针Integer随系统32位或64位变化而变化。32位中转变成long大小,64位中转成longint大小。相当于VBA中的longPtrUINTEGER整型字节型BYTE-127 至288整型SHORT-32768至32767相当于VBA中的integer长整型LONG或integer-2147483648至2147483647相当于VBA中的long在32位的FB中integer等价long64位长整型LONGINT-9 223 372 036 854 775 808至9 223 372 036 854 775 807相当于VBA中的LongLong无符整型字节型UBYTE0至255相当于VBA中的Byte无符整型USHORT0至65535无符长整型ULONG0至4294967295无符64位ULONGINT0至9 223 372 036 854 775 807单精度SINGLE双精度DOUBLE字符串String0至2147483647个字节定长字符串String *NC字符串Zstring同上兼容c宽字符串WstringWstring主要用于unicode兼容c+对象Object二、Freebasic操作符:字符串操作符+拼接多个字符串,如果其中一个变量不是string,将返回错误&强制拼接多个字符串。如果其中一个变量不是string,将自动转成string数学运算符+-*/mod-取负SHL将一个数值表达式的位左移SHR将一个数值表达式的位右移比较运算符=访问成员的指针赋值操作符=赋值&=Str2 &=str1 相当于str2=str2&str1+=-=*=/=Mod=And=Or=Xor=Eqv=Lmp=Shl=Shr=Let赋值语句,基本不用Let()同上12、基类和子类一个基类可以是另一个基类的子类,这样便形成了复杂的继承结构。出现了类的层次。一个基类派出一个子类A,该子类又做了另一个子类B的基类。则原来的基类为子类B的间接基类。 子类是基类的特殊化 子类是基类定义的延续 基类是子类的公有特性 子类将其自身与基类区别开来的方法是添加数据成员和成员函数 如何定义子类呢?Type 学生End typeType 大学生 extends 学生 End type注意:关键词extends是复数形式 13、Freebasic继承的方式 目前到freebasic1.0为止,FB的子类只能以public方式继承自基类。(也许是我不知道如何使用protected方式继承)Public方式的特点: 可以在子类的成员函数中访问基类的非私有成员数据 可通过子类的对象直接访问基类的公有成员14、基类和子类的重名成员子类定义了与基数同名的成员,在子类中访问同名成员时,自动隐藏基类的同名成员在子类中使用基类的同名成员,可以显式使用基类名.成员或base.成员15、基类和子类的构造函数一个子类对象也属于其基类,因此当程序创建一个子类对象时,系统首先自动创建一个基类的对象。在调用子类的构造函数构建子类对象时,系统首先调用基类的构造函数构建基类对象,当子类对象的生存期结束时,首先调用子类的析构函数,然后调用基类的析构函数 基类构造函数的调用方式:隐式调用和显式调用两种方式: (1)隐式方式是指在子类的构造函数中不指定对对应的基类的构造函数,调用的是基类的默认构造函 数即含有缺省参数值和不带有参数的构造函数) (2)显式方式是指在子类的构造函数中指定要调用的基类构造函数。并将子类构造函数的部分参数值传递给基类构造函数(注:除非基类有默认的构造函数,否则必须采用显式调用方式)16、多态性和虚函数 什么是多态性? 多态性是面向对象程序设计的一个重要特征,它主要表现在函数调用时实现“一种接口,多种方法”。 两种多态性: 编译时多态性和运行时多态性。 编译时多态性:在函数名或运算符相同的情况下,编译器在编译阶段就能能够根据函数参数类型的 不同来确定要调用的函数通过重载实现。 运行时多态性:在函数名、函数参数和返回类型都桢同的情况下,只能在程序 运行时 才能确定要调用的函数通过虚函数实现。17、虚函数virtual 虚函数是在基类中冠以virtual的成员函数。它提供了一种接口 虚函数可以在一个或多个子类中被重定义 实现运行时多态的关键首先是要说明虚函数 必须用基类指针调用子类的不同实现版本。 (1)、虚函数的定义 定义:在某基类中声明为 virtual 并在一个或多个子类中被重新定义的成员函数。 语法:virtual Function或sub 函数名(参数表) End function 用途: 实现多态性,通过指向子类的基类指针,访问子类中同名覆盖成员函数 虚函数必须是基类的非静态成员函数,其访问权限可以是protected或public。 定义为virtual的函数是基类期待子类重新定义的,基类希望子类继承的函数不能定义为虚函数。 (2)、虚函数的作用 虚函数的作用是实现动态联编,也就是在程序的运行阶段动态地选择合适的成员函数,在定义了虚函 数后,可以在基类的子类中对虚函数重新定义,在子类中重新定义的函数应与虚函数具有相同的形参 个数和形参类型。以实现统一的接口,不同定义过程。如果在子类中没有对虚函数重新定义,则它 继承其基类的虚函数。 当程序发现虚函数名前的关键字virtual后,会自动将其作为动态联编处理,即在程序运行时动态地选择 合适的成员函数。虚函数是FreeBasic多态的一种表现。 使用虚函数,我们可以灵活的进行动态绑定,当然是以一定的开销为代价。如果父类的函数(方法) 根本没有必要或者无法实现,完全要依赖子类去实现的话,可以把此函数(方法)设为virtual 函数名=0 我们把这样的函数(方法)称为纯虚函数,如果一个类包含了纯虚函数,称此类为抽象类。 我们只需在把基类的成员函数设为virtual,其子类的相应的函数也会自动变为虚函数。 (3)虚函数的动态绑定过程 表面点来说,虚函数是根据调用它的指针或引用所指向或绑定的对象的类型来调用绑定或指向的类型 所定义的虚函数版本。 由于类中有虚函数存在,所以编译器就会为这个类插入一段你不知道的数据,并为它创建一个表。那段数据叫做vptr指针,指向那个表。那个表叫做vtbl,每个类都有自己的vtbl,vtbl的作用就是保存自定义为virtual的函数是基类期待子类重新定义的,基类希望子类继承的函数不能定义为虚函数。基类中虚函数的地址,我们可以把vtbl形象地看成一个数组,这个数组的每个元素存放的就是虚函数的地址。 调用虚函数时,首先是取出vptr的值,这个值就是vtbl的地址,再根据这个值来到vtbl这里,取出vtbl中相应的slot里的值,这个值就是所在调用的虚函数的地址了,最后调用这个函数。现在我们可以看出来了,只要vptr不同,指向的vtbl就不同,而不同的vtbl里装着对应类的虚函数地址,所以这样虚函数就可以完成它的任务。 (4)纯虚函数 在基类中不能对虚函数给出有意义的实现,而把它声明为纯虚函数,它的实现留给该基类的子类去做。这就是纯虚函数的作用。 纯虚函数可以让类先具有一个操作名称,而没有操作内容,让子类在继承时再去具体地给出定义。凡是含有纯虚函数的类叫做抽象类。这种类不能声明对象,只是作为基类为子类服务。除非在子类中完全实现基类中所有的的纯虚函数,否则,子类也变成了抽象类,不能实例化对象。在函数形参后面写上0以指定纯虚函数。17、函数重载函数重载:是指一组功能类似但函数参数类型(或个数)不同的函数可以共用一个函数名。当FB编译器遇到重载函数的调用语句时,它能够根据不同的参数类型或不同的参数个数选择一个合适的函数。 不能利用函数返回类型的不同进行函数重载。因为在没有确定调用的是哪个函数之前,不知道函数的返回类型。同样,不能利用引用进行函数重载。一般函数的重载使FB程序具有更好的可扩充性。此外。类的成员函数也可以重载,特别是构造函数的重载给FB程序设计带来很大的灵活性。如何区别重载、重写(覆盖)和隐藏?(1).重载:重载从overload翻译过来,是指同一可访问区内被声明的几个具有不同参数列(参数的类型,个数,顺序不同)的同名函数,根据参数列表确定调用哪个函数,重载不关心函数返回类型。示例代码如下: Type Apublic: sub test( I as integer); sub test( I as double); sub test( I as integer, j as double); sub test(I as sing, j as long); function test(I as integer) as long; 错误,非重载end type前四个互为重载函数,最后一个和第一个不是重载函数。 (2).隐藏:隐藏是指子类的函数屏蔽了与其同名的基类函数。注意只要同名函数,不管参数列表是否相同,基类函数都会被隐藏。 (3).重写:重写翻译自override,也翻译成覆盖(更好一点),是指子类中存在重新定义的函数。其函数名,参数列表,返回值类型,所有都必须同基类中被重写的函数一致。只有函数体不同,子类调用时会调用子类的重写函数,不会调用被重写函数。重写的基类中被重写的函数必须有virtual修饰。Type Apublic: virtual Function fun3( I as long) as long return i+1end functionend typetype B extends A B从A继承public: 重写 virtual Function fun3( I as long) as long return i*3end functionend type 重载和重写的区别:(1)范围区别:重写和被重写的函数在不同的类中,重载和被重载的函数在同一类中。(2

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论