/*
* 程序的版权和版本声明部分
* 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. Adobe Auditon使用功能(一):将音频文件切分成多段,并将每段音频分别保存到不同的文件中
  2. r语言 python 书_推荐关于R的几本书
  3. 计算机操作记录怎么删除,win7系统如何清除电脑使用记录
  4. 算法基础:图的相关算法知识笔记
  5. 《需求工程——软件建模与分析》阅读笔记之二
  6. java程序设计自考_java程序设计自考试题
  7. 人脸识别FAR值重新认识
  8. Gulp browserify livereload
  9. [nsis]安装包反编译
  10. C++ string类和字符串的访问和拼接操作
  11. python爬虫下载模块_python爬虫模块之HTML下载模块
  12. chrome浏览器历史版本
  13. 基2FFT算法matlab程序编写,基2时抽8点FFT的matlab实现流程及FFT的内部机理
  14. Firefox在win10与win11系统上账号不同步的解决办法
  15. [OfficeExcel] OfficeExcel2010 第18讲 Lookup--浅谈数组
  16. 数据压缩_任务五_预测误差均方值推导及最小二乘法
  17. 网站seo优化方式途径
  18. 影视解说短视频如何配音?三个文字转语音小技巧,配音其实也不难
  19. 敏涵控股集团:以匠心致敬品质 用效益回馈社会
  20. python--剑指offer--14- I. 剪绳子

热门文章

  1. 12306火车刷票(python练习题)
  2. sudo 命令的两个错误解决
  3. 最不伤耳朵的骨传导耳机品牌、骨传导蓝牙耳机品牌推荐
  4. ElementUI+Vue实现的新一代后台权限管理系统
  5. ebay注册流程_eBay账号如何注册?eBay账号开店注册指南
  6. 适合初中生计算机组成原理视频,【五三•书友会】UbD教学模式在信息技术教学中的应用探究 ——初中部理化生计组《基于理解的教学设计》书友会...
  7. 假设检验之参数检验 ------- 配对样本 t 检验
  8. 阿里测评2018.7.18
  9. 数据缺失值补全方法 sklearn.impute.SimpleImputer 使用实例
  10. 有上下限的最小费用可行流