/*
* 程序的版权和版本声明部分
* Copyright (c)2012, 烟台大学计算机学院学生
* All rightsreserved.
* 作者:    李洋
* 完成日期: 2013年 5 月  31 日
* 版本号: v1.0
* 输入描述:无
* 问题描述:无
* 程序输出:无
*/
#include <iostream>
using namespace std;
class Vehicle  //交通工具
{
public:
void run() const
{
cout << "run a vehicle. "<<endl;
}
};
class Car: public Vehicle  //汽车
{
public:
void run() const
{
cout << "run a car. "<<endl;
}
};
class Airplane: public Vehicle  //飞机
{
public:
void run() const
{
cout << "run a airplane. "<<endl;
}
};
int main()
{
cout<<"(a) 直接用对象访问成员函数: "<<endl;
Vehicle v;
v.run();
Car car;
Airplane airplane;
car.run();
airplane.run();
cout<<"(b)用指向基类的指针访问成员函数: "<<endl;
Vehicle *vp;
vp=&car;
vp->run();
vp=&airplane;
vp->run();
return 0;
}

当基类的指针指向派生类时,用指针调用同名成员函数,执行的是基类的成员函数,而不是派生类的成员函数。

#include <iostream>
using namespace std;
class Vehicle  //交通工具
{
public:
virtual void run() const  //(2) run()为纯虚函数
{
cout << "run a vehicle. "<<endl;
}
};
class Car: public Vehicle  //汽车
{
public:
void run() const
{
cout << "run a car. "<<endl;
}
};
class Airplane: public Vehicle  //飞机
{
public:
void run() const
{
cout << "run a airplane. "<<endl;
}
};
int main()
{
cout<<"(a) 直接用对象访问成员函数: "<<endl;
Vehicle v;
v.run();
Car car;
Airplane airplane;
car.run();
airplane.run();
cout<<"(b)用指向基类的指针访问成员函数: "<<endl;
Vehicle *vp;
vp=&car;
vp->run();
vp=&airplane;
vp->run();
return 0;
}

将Vehicle类的定义修改为虚函数,其余不变,当基类的指针指向派生类时,用指针调用同名虚成员函数,执行的是派生类的成员函数。

#include <iostream>
using namespace std;
class Vehicle  //交通工具
{
public:
virtual void run() const =0;//(3) run()为纯虚函数
};
class Car: public Vehicle  //汽车
{
public:
void run() const
{
cout << "run a car. "<<endl;
}
};
class Airplane: public Vehicle  //飞机
{
public:
void run() const
{
cout << "run a airplane. "<<endl;
}
};
int main()
{
cout<<"(a) 直接用对象访问成员函数: "<<endl;
//Vehicle v;
//v.run();
Car car;
Airplane airplane;
car.run();
airplane.run();
cout<<"(b)用指向基类的指针访问成员函数: "<<endl;
Vehicle *vp;
vp=&car;
vp->run();
vp=&airplane;
vp->run();
return 0;
}

将Vehicle类的定义修改为纯虚函数,找出main()函数中将使编译出错的行改为注释。

第十四周 程序阅读,理解虚函数与纯虚函数相关推荐

  1. 理解虚基类、虚函数与纯虚函数的概念

    引言 一直以来都没有写过一篇关于概念性的文章,因为我觉得这些概念性的东西书本上都有并且说的也很详细写来也无用,今天突发奇想想写 一写,下面就和大家讨论一下虚基类.虚函数与纯虚函数,一看名字就让人很容易 ...

  2. C++(十五)虚函数和纯虚函数(抽象类)

    文章目录 一.虚函数 二.纯虚函数 三.虚析构函数 四.虚函数与纯虚函数用法与区别 关于C++中面向对象的多态特性,多态:即多种形态.在C++中一般是这么解释的:向不同的对象发送同一个消息,不同的对象 ...

  3. C++虚函数和纯虚函数理解

    虚函数:函数中带有关键字virtual 纯虚函数:纯虚函数是在基类中申明为虚函数,它在基类中没有定义, 但是要求任何派生类都需要定义自己的实现方法,在基类的实现纯虚函数的方法是在函数原型后添加=0(v ...

  4. (转)虚函数和纯虚函数区别

    在面向对象的C++语言中,虚函数(virtual function)是一个非常重要的概念.因为它充分体现 了面向对象思想中的继承和多态性这两大特性,在C++语言里应用极广.比如在微软的MFC类库中,你 ...

  5. C++_虚继承_虚函数_纯虚函数(多继承的二义性,多态)

    基本信息 每一个类都有一个虚表,以及虚表指针; 虚表的内容是编译器决定的,虚表中用于存放虚函数的指针, 程序运行时的类型信息等; 每个多态对象都存放着一个指向当前类型的虚表的指针, 该指针在构造函数中 ...

  6. C++ - 虚基类、虚函数与纯虚函数

    虚基类        在说明其作用前先看一段代码 class A { public:    int iValue; }; class B:public A { public:    void bPri ...

  7. C++虚函数、纯虚函数、虚析构、纯虚析构、动态绑定和抽象类详解。

    目录 1.虚函数的概念 2.虚函数的定义 3.虚函数的作用 4.用虚函数实现多态的方法 5.动态绑定和静态绑定 6.纯虚函数和抽象类 7.虚析构和纯虚析构 1.虚函数的概念 在C++程序中我们经常可以 ...

  8. cnbloger: 北岛知寒, C++ - 虚基类、虚函数与纯虚函数; csdner: Hsuxu, C++虚基类的实现机制

    If the author of the article is not allowed to reprint, this article will be deleted C++ - 虚基类.虚函数与纯 ...

  9. C++ 多态 虚函数与纯虚函数

    C++ 多态 虚函数与纯虚函数 虚函数是C++重要思想-多态中不可或缺的一个知识点与用法,但初学者一般很难理解,在这里用通俗语言介绍一下. 百度百科: 在某基类中声明为 virtual 并在一个或多个 ...

最新文章

  1. 分布式 RPC 框架
  2. 快钱如何快-企业级效率提升实践
  3. 如何取消Angular rxjs Observable的订阅
  4. [html] iframe可以使用父页面中的资源吗(如:css、js等)?
  5. “黑科技”监控图像技术你知道吗?
  6. leetcode 290 Word Pattern
  7. 男人拥有女人后的心态变化
  8. git 第二次提交_win10 将本地项目上传到github (第一次+再次上传)
  9. python滑动手机屏幕_appium+python自动化24-滑动方法封装(swipe)
  10. [USACO14OPEN]Odometer【数位DP】
  11. 随机梯度下降(SGD)和批量梯度下降(BGD)的区别
  12. WPS如何对文档加密,忘记密码又如何解密?
  13. MYSQL 下载安装教程
  14. 计算机组成原理罗克露课后答案,计算机组成原理[完整版](罗克露)(全)原版教案.ppt...
  15. BeetlSql中的Mapper
  16. Android 阿里云镜像谷歌仓库
  17. 2021北京高考成绩查询教育在线,关注 | 多省公布2021高考成绩查询时间!
  18. win10 安装Microsoft Project 2010 双击mpp文件提示无法在此电脑上运行该程序解决办法
  19. mysql启动跳过错误_mysql启动错误
  20. 31游戏。(Geoffrey Mott-Smith(1954)) 分析

热门文章

  1. php 导出Excel 字符过长科学计数法
  2. 为什么天才容易患阅读障碍症_阅读障碍症说不定好处更大的原因是什么?
  3. FFT原理与实现(代码)
  4. 中小学校开展书法课教育的重要性
  5. 2022年博客之星排行榜 日榜 2023-01-02 博客之星总榜
  6. 基于python+django+vue的房屋出租租赁系统
  7. Docker镜像仓库registry
  8. 带有备忘录的递归算法
  9. Excel当中SUMPRODUCT函数
  10. 在img标签限制图片大小