科技资讯科技资讯S I N &T NOLOGY I NFORM TI ON
2008N O .01
SC I ENC E &TEC HN OLO GY I NFO RM ATI O N
学术论坛
制胜的法宝——旅游地差异。
4参与是旅游的强大生命力
民俗文化是由集体创作、集体传承的作品,反映到旅游也如此。而人是一个体的动物,人离不开体,不喜欢独处,因而具有强烈的参与性。在民俗旅游当中,参与是旅游的强大生命力,只有参与了才会更深刻地体会,只有更深刻的体会了才能更好地帮助传承介绍,才能使旅游更具活力,也只有参与了才会使紧张的疲惫的神经完完全全的放松,达到了旅游的目的。
让游客参与其中的旅游活动项目越来越受到游客的推崇。每到阳春三月是马缨花盛开的季节,农历二月初八这天,云南大姚县昙华寺山歌如潮,花如海洋,这是彝家一年一度的插花节。相传是为了纪念咪依鲁为救受害百姓,用一朵含有剧毒的小白花同土官一起同归于尽,后来人们到每年农历二月初八都要举行插花节。这一天附近村、县的游人也会来参
加,带上花来一展自己美丽的歌喉,由于其参
与性广泛,因而一直流传至今。只有真正坐到哈尼族长街宴,才能体味真正的哈尼民俗;只有真正在怒江溜索桥上溜过去才能体味人的力量是多么伟大;才能体味怒江人的生活,只有参与了民众的快乐,才能体味到人生的真正快乐。参与才会自觉地去为之做广告,为其发展做一分贡献。
5结语
旅游发展的趋势已经表明,文化性质的旅游景点更为人们所关注。而民俗文化则成为了旅游的灵魂,旅游的血脉,如果没有了民俗文化,旅游将失去活力。随着人们生活水平的提升,人们有了更多的时间去探究自己人类本身的历史,都有了强烈的揭密愿望,,都希望了解自己人类来龙去脉,使自己活得明明白白。旅游能提供这个环境,而民俗旅游更不失为其重点。因而在旅游业,加强对民俗资源的开发和利用是必要的,而且是有利的。
参考文献
[1]张宝三.奇境云南[M ].昆明:云南人民出版
社.1999,9.
[2]钟敬文.民俗学概论[M ]上海:上海文艺
出版社.1998,12.
[3]杨寿川.云南民族文化旅游资源开发研究
[M ].北京:中国社会科学出版社,2003,11.
1前言
面向对象(O bj ect -O r i ent ed)作为一种新的结构化程序设计方法,与以往的程序设计方法根本区别在于面向对象程序设计有如下3个特性:封装性、继承性、多态性,而继承和多态是面向对象的核心所在,要从根本上实现软件复用和程序设计效率提高就必须实现多态性。多态性(pol ym or phi s m ),字面意思理解就是多种形状。按照Char l i e C al ver t s 的理解,多态性就是允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。简单的说,就是允许将子类型的指针赋值给父类型的指针。在C++语言中,多态性可以理解为不同的对象接收到相同的消息(这里的消息指的是对类的成员函数的调用),产生不同的动作即用相同的接口调用不同的函数,一句话就是:“一个接
口,多种方法[1]
”。
与纯粹的面向对象语言如C #、J AV A 不同在于C++语言中,根据联编(也称为关联,在面向对象中指的是把一条消息和一个对象的方法相结合的过程)的阶段的不同,对多态有两个分类即:编译时多态(静态多态),运行时多态(动态多态)[2]。在C ++语言中,多态可以通过如下4种方式来实现,包括:强制多态,重载多态,类型参数化多态,包含多态[3]。强制多态和重载多态又合称为专用性多态,类型参
数化多态和包含多态又合称为通用性多态。通用多态性与专用多态性的区别在于其所刻画的关系相关的类型之间有无关联。
强制指对两种不同类型值进行转换的语义操作,重载(over l oad)允许存在多个同名函数,而这些函数的参数表不同(或许参数个数不同,或许参数类型不同,或许两者都不同)。包含多态在C++语言中用虚函数来实现,虚函数就是允许其子类重新定义的函数,子类重新定义父虚函数的方法称为覆盖(over r i de ),又称重写。当子类重新定义了父类的虚函数后,父类指针根据赋给它的不同的子类指针,动态的调用属于子类的该函数,这样的函数调用在编译期间是无法确定的,与之对应重载的实现是由编译器根据函数不同的参数表,对同名函数的名称做修饰,然后这些同名函数就成了不同的函数。参数类型化多态指的是将程序所处理的类型参数化,使用得一段程序可以用于处理多种不同类型的对象。一般的,多数的面向对象语言使用者认为强制多态和重载多态不是真正意义上的多态[4]。
2多态性的实现
2.1强制多态
编译程序通过语义操作,把操作对象的类型强行加以变换,以符合函数或操作符的要求。程序设计语言中基本类型的大多数操作符,在发生不同类型的数据进行混合运算时,
编译程序一般都会进行强制多态。程序员也可以显示地进行强制多态的操作(C as t i ng)。例如,i nt +doubl e ,编译系统一般会把i nt 转换为doubl e ,然后执行doubl e +doubl e 运算,这个i nt ﹣﹥doubl e 的转换,就实现了强制多态,既可是隐式的,也可显式转换。
设S 为类型标示符,X 为运算表达式,则强制多态可用如下3个公式表达:
①﹤S ﹥﹙X ﹚②﹙S ﹚﹤X ﹥
③st ati c_cast ﹤S ﹥﹙X ﹚例如,f l oat x=3.14,y
y=xi nt (x)//对x 取整(f l oat 型转化为i nt 型),求其小数部分。
但是在强制多态时必须注意到,将高类型数据转化为低类型数据,数据精度会有损失,此外这种转化是一次性的,上例中对x 取整后,x 的实际数据类型并没有改变。2.2重载多态
重载多态包括两种重载,运算符重载和函数重载。在C++语言中,编译系统根据实参和型参的类型及个数的最佳匹配,自动确定调用哪一个函数,这就是函数重载。相应的,对已有的运算符赋予多重含义,使同一个运算符作用于不同类型的数据时,产生不同的行为,这就是运算符重载。
2.2.1运算符重载
运算符重载在编译过程中完成,先把指定
面向对象多态性的研究
王家华全斐
(西安石油大学计算机学院陕西西安
710065)
摘要:多态性作为面向对象的核心,增强了程序设计的灵活性。本文结合示例,对强制多态,重载多态,参数类型化多态,包含多态这四种多态实现机制进行了说明。最后简要提出了目前多态研究中存在的问题。关键词:面向对象多态强制多态重载多态参数类型化多态中图分类号:TP391文献标识码:A 文章编号:1672-3791(2008)01(a )-0180-02
180C E C E EC H A
科技资讯
科技资讯S I N &T N OLOGY I N FORM TI ON 2008N O.01
SCI ENC E &TEC HNO LO GY I N FO RM A TI ON 学术论坛
的运算表达式转化为对运算符函数的调用,运算对象转化为运算符函数的实参,最后根据实参类型确定需要调用的函数。
运算符重载有两种形式,重载为类的成员函数和重载为类的友元函数,重载时必须注意不能臆造运算符,重载后运算符的优先级和结合性不变,功能与原有类似,以及不能有二义性等规则。
2.2.2函数重载
函数重载允许功能相近的函数在相同的作用域内同名定义,这样就方便记忆,便于使用,程序设计也更加灵活。例如:
#i nc l ude <i ost r eam >#i ncl ude <st r i ng>//定义两个重载函数
i nt m y_add(i nt a,i nt b){r et ur n a +b;}i nt m y_add(i nt a,st d::st r i ng b){r et ur n a +at oi (b.c_st r ());}i nt m ai n (){i nt i =m y_add(1,2);//两个整数相加
i nt s =m y_a dd(1,"2");//一个整数和一个字符串相加
st d::cout <<"i ="<<i <<"\n";st d::cout <<"s ="<<s <<"\n";  }
根据参数列表的不同(类型、个数或兼而有之),m y_add(1,2)和m y_add(1,"2")被分别编译为对m y_a dd(i nt ,i nt )和m y_add (i nt ,st d::st r i ng)的调用,实现了多态。2.3参数类型化多态
类型参数化多态是指当一个函数(类)统一地对若干类型参数操作时,这些类型表现出某些公共的语义特性,而该函数(类)就是用来描述该特性的[5]。类型参数化多态又叫静态多态,编译时多态,它的执行速度快,异常少,调用在编译时已经确定。在类型参数化多态中,一个多态函数(类)必须至少带有一个类型参数,该类型参数确定函数(类)在每次执行时操作数的类型。这种函数(类)也称类属函数(类)。类型参数化多态的应用较广泛,被称为最纯的多态。
实现参数类型化多态的工具是模板,包括函数模板和类模板。函数模板可以在类模板内部或者外部定义。如下例为一个函数模板的定义:
  #i ncl ude <i ost r ea m .h>  t em pl at e <t ype na m e T>  Tabs(T x)
  {r et ur n x <0?–x:x;}  voi d m a i n()  {i nt n =-5;  doubl e =-  5.5;  c out <<abs(n)<<endl ;
cout <<abs(d)<<endl ;}
运行结果为:5
55
下例为一个类模板的定义:  t em pl at e <t ypenam e T >  cl ass classnam e   {publ ic:   cl assnam e(T t ):_val (t ){}   ~cl assnam e(){}   void di sp l ay();   pr i vat e:   T _val ;  };
  t em pl at e <t ypenam e T >  voi d cl assnam e<T >::di spl ay()  {
cout <<_va l <<e ndl ;}
上面是一个cl as snam e 类的声明,cl assna m e 类中有个di spl ay()函数,它输出成员_val 到控制台。2.4包含多态
包含操作指同样的操作可以用于一个类型及其子类型。包含多态的基础是虚函数。虚函数是引入了派生概念后,用来表现基类和派生类的成员函数之间的一种关系的[2],其为C++语言提供了灵活的多态实现机制。
虚函数在基类进行定义,在基类中对需要定义为虚函数的成员函数在其声明中加上关键字vi r t ual ,虚函数的使用可见下例(程序设计语言为J AVA):
  t ype
  car =cl ass   pub l i c
  p r oced ur e r un ();vi rt ual ;ab st r act ;//启动纯虚函数
  pr ocedu r e land();v i r t u al ;abst r act ;//停止纯虚函数
  funct ion m odal ():st r ing;vi r t u al ;abst r ac t ;//查寻型号纯虚函数
  end;//一个描述汽车的基类 
  t r uck =cl ass(car )  p r i vat e   f M odal :St r i ng;  pub l i c
  const r uct or C r eat e();  dest r uct or D est r oy();over r i de;  pr ocedur e r un();over r i de;  pr ocedur e st op();over r i de;
  f unc t i on m odal ():s t r i ng;o ver r i de;
  end;//派生子类卡车 
  j eep =cl ass(car )  p r i vat e   f M odal :St r i ng;  pub l i c
  const r uct or C r eat e();  dest r uct or D est r oy();over r i de;  pr ocedur e r un();over r i de;  ();;
  f unc t i on m oda l ():s t r i ng;over r i de;
  e nd;//派生子类吉普车 
  pr ocedur e car _r un(const r car :car );
  begi n
  rcar.r un();  end;//定义全局函数car _r un 这样,就可以让所有传给它的汽车(ca r 的子类对象)都启动,car _r un 函数接受参数的是c ar 类对象引用,而实际传递给它的都是ca r 的子类对象,如此就实现了多态性。
3结语
多态归根到底,其作用表现在“接口重用”,而接口的最大限度的重用,节省了设计人员原来用大量类来
实现接口的资源浪费,大大提高了程序设计的效率。但多态性作为面向对象的核心内容之一,由于其内容的庞杂,实现方式的多样,更多的是由于程序设计人员对多态性理解的不同,因此对于多态的具体分类,静态多态和动态多态的结合等相关内容还有待进一步深入研究。
参考文献
[1]邵维忠,杨芙清.面向对象的系统分析[M ].
北京:清华大学出版社,1998.
[2]揣锦华,李军民.C ++程序设计语言[M ].
西安:西安电子科技大学出版社,2002.[3]蓝雯飞.C_面向对象程序设计中的多态性
研究[J ].计算机工程与应用,2002,[M ]8.[4]肖基毅.面向对象程序设计中的多态性研
究[J].微计算机应用,1999,20(3).[5]L .G ar del l i ,P .W egner.O n U nder st andi ng T yp e s ,Da t e Ab s t r a c t i on ,a n d Pol ym or phi sm [J ].AC M [J]Com put e r Sur ve y,vol.17,N o.4,1985,P P471—522.
181
多态性与虚函数
C E CE ECH A .pr ocedur e st op over r i de