程序让生活更美好

半亩方塘 天光云影

  C++博客 ::  :: 新随笔 :: 联系 ::  :: 管理 ::
  55 随笔 :: 4 文章 :: 202 评论 :: 0 Trackbacks

C++ 中的多态一例

      C++ 为我们提供了多态的功能,什么是多态呢,我的理解就是如果把指向派生类对象的指针赋值给基类指针,那么通过这个基类指针调用继承的函数的时候会根据指针指向的对象类型来动态的调用所需要的方法,这种特性就是多态了。(除了这个之外好像函数重载也是一种)

   可以先看下面一段程序:
程序代码

程序的运行结果是 :

Draw Circle

Draw Triangle

Draw Square

从结果可以可以看到,输出的结果并不是 Draw shape 这个就是多态的功效所在了。它直接根据指针实际指向的类型来动态调用了执行的函数。

要使用多态,必须把基类中需要使用多态功能的方法定义为 virtual 这样才能使用多态的强大功能。如果把基类的 draw 方法前面的 virtual 去掉,那么最后输出的结果将会是

Draw Shape

Draw Shape

Draw Shape

这说明没有使用多态,只是覆盖了。

 

 

多态的好处是显然的,开发者可以利用旧代码来调用新的方法,这样软件供应商可以在不透露技术秘密的情况下发现软件包,而开发者也可以根据继承机制从软件供应商提供的类库中派生出新类,且能和旧类库一起工作。

 

此文完。

                         参考自《高质量程序设计指南 C/C++ 语言》
posted on 2006-07-04 14:08 北风之神007 阅读(1145) 评论(7)  编辑 收藏 引用 所属分类: c/c++

评论

# re: C++中的动态决议 2006-07-04 18:18 LOGOS
那个,现在主流上不把那个特性叫做动态决议  回复  更多评论
  

# re: C++中的动态决议 2006-07-26 18:20 mummy
我说我今天弄个东东,总是输出基类的内容呢,原来少了个东西呀!!!
看来要学的好多呀!!!  回复  更多评论
  

# re: C++中的动态决议 2006-09-08 11:13 张磊.NET
动态决议就是指多态吧。  回复  更多评论
  

# re: C++中的动态决议 2006-09-08 12:36 JetSun
是的
  回复  更多评论
  

# re: C++中的多态一例 2007-04-11 08:50 帅哥
很好的文章  回复  更多评论
  

# re: C++中的多态一例 2008-04-02 17:43 123
要使用多态,必须把基类中需要使用多态功能的方法定义为 virtual , 这样才能使用多态的强大功能。如果把基类的 draw 方法前面的 virtual 去掉,那么最后输出的结果将会是

Draw Shape

Draw Shape

Draw Shape

这说明没有使用多态,只是覆盖了。//这里是隐藏吧
  回复  更多评论
  

# re: C++中的多态一例 2008-04-03 08:49 scf
本人觉得覆盖跟隐藏应该意思一样
都是让某些功能在某些域中不可见  回复  更多评论
  


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理