面向对象的三个基本特征

面向对象的三个基本特征是:封装、继承、多态。其中,封装可以隐藏实现细节,使得代码模块化;继承可以扩展已存在的代码模块(类);它们的目的都是为了——代码重用。而多态则是为了实现另一个目的——接口重用!

多态: 为了使同一方法在基类和派生类中的实现可以不同。

多态的实现:

1、在派生类中重新定义基类的方法

2、使用虚方法

如果要在派生类中重新定义基类的方法,通常将基类方法声明为虚方法

如果方法是通过引用或指针调用而不是对象直接调用,使用哪一种方法将有两种情况:

1、如果在基类中没有将方法声明为virtual函数,则将根据引用或指针的类型选择使用哪一种方法

如:

//BassPlus是Bass的派生类

//ViewAcct()是非虚函数

Barss dom("Dominic" , 1124, 432.45);

BassPlus dot("Dorothy", 11234, 345.00);

Barss & b1_ref=dom;

Barss & b2_ref=dot;

b1_ref.ViewAcct();     //use  Barss::ViewAcct()

b2_ref.ViewAcct();    //use  Barss::ViewAcct()

由于  ViewAcct()为非虚函数,因此将根据引用的类型而不是其所指的对象的类型确定所调用的方法。使用Brass指针替换引用,得到的效果相同

2、如果在基类中将方法声明为virtual函数,则将根据引用或指针所指对象的类型选择使用哪一种方法

//BassPlus是Bass的派生类

//ViewAcct()是虚函数

Barss dom("Dominic" , 1124, 432.45);

BassPlus dot("Dorothy", 11234, 345.00);

Barss & b1_ref=dom;

Barss & b2_ref=dot;

b1_ref.ViewAcct();     //use  Barss::ViewAcct()

b2_ref.ViewAcct();    //use  BarssPlus::ViewAcct()

由于  ViewAcct()为虚函数,因此将根据引用所指对象的类型确定所调用的方法。b1_ref所指的对象为Barss,b2_ref所指的对象为BarssPlus。使用Brass指针替换引用,得到的效果相同

例子:(2012某**软件公司笔试题)

请按顺序写出下面代码的输出结果:

答案:call child func

call ~child

call ~base

方法在基类中被声明为virtual后,在基类中会自动生成为virtual方法,但通常还是会在派生类中使用virtual关键字

参考:

C++封装、继承、多态 - ruyue_ruyue的专栏 - 博客频道 - CSDN.NET http://blog.csdn.net/ruyue_ruyue/article/details/8211809

浅谈C++多态性 - Hackbuteer1的专栏 - 博客频道 - CSDN.NET  http://blog.csdn.net/hackbuteer1/article/details/7475622

最新文章

  1. iOS 安装应用
  2. DNS域名解析过程
  3. CGContextAddCurveToPoint 的深入理解
  4. 微信小程序开发公测,小程序账号申请办法攻略
  5. GLSL基础
  6. How to begin with the webpage making
  7. 配置使VirtualBox下的linux可以宿主机互访并上网
  8. 转载---SQL Server XML基础学习<1>之--FOR XML PATH
  9. http://codepen.io/zhou-yg/pen/NqgPmg 在线编辑器
  10. PHP在Windows下安装配置第一步
  11. Openstack 的 RPC使用。
  12. Struts2图片文件上传,判断图片格式和图片大小
  13. Adobe Flash Builder 4.7 新功能详解
  14. angular自定义验证 ngModel的一些理解
  15. C/C++ 函数指针
  16. JSP + JDBC + MySQL 读取数据库内容到网页
  17. Django积木块11 —— 缓存
  18. C#.Net Core 操作Docker中的redis数据库
  19. 用absolute进行页面的自适应布局
  20. generator+列表生成式输出杨辉三角形

热门文章

  1. Opentack常用技巧
  2. AC自动机(转)
  3. Android中的Uri.parse()
  4. 【bzoj2463】 谁能赢呢?
  5. HDU 5497 Inversion
  6. Android学习笔记01-Mac下搭建Java开发环境
  7. eclipse下载
  8. spring 注解简单使用
  9. 连接oracle读取数据
  10. Spring入门_01