/* (程序头部注释开始)
* 程序的版权和版本声明部分
* Copyright (c) 2011, 烟台大学计算机学院学生
* All rights reserved.
* 文件名称:我对虚函数、多态性和抽象类的理解
* 作 者: 雷恒鑫
* 完成日期: 2012 年 05月11 日
* 版 本 号: V1.0
* 对任务及求解方法的描述部分
* 输入描述:
* 问题描述:1. 进一步多态性的基本概念2. 学会利用虚函数实现多态性3. 学会在设计中利用纯虚函数构造抽象基类
* 程序输出:
* 程序头部的注释结束
*/
任务1.1
#include <iostream>
using namespace std;
class Vehicle
{
public:
void run() const { cout << "run a vehicle. "<<endl; } //(2) 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();
system("pause");
return 0;
}
运行结果:
任务1.2
#include <iostream>
using namespace std;
class Vehicle
{
public:
virtual void run() const { cout << "run a vehicle. "<<endl; } //(2) 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();
system("pause");
return 0;
}
运行结果:
任务1.3
#include <iostream>
using namespace std;
class Vehicle
{
public:
virtual void run() const =0; //(2) 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();
system("pause");
return 0;
}
运行结果:
概括:
(1)任务1.1和任务1.2比较
任务1.2在基类中使用了虚函数,这样可以用指向基类的指针来灵活访问派生类中同名的成员函数,是程序易于理解易于读取。
(2)通过任务1.3的操作我明白了纯虚函数是不能被调用的,包含纯虚函数的类无法建立对象;
(3)抽象类的作用是作为一个类族的共同基类。
(4)动态多态性是通过虚函数(virtual function)实现的,通过指向基类的指针来灵活访问派生类中同名的成员函数,实现不同的功能。
分享到:
相关推荐
1.1 简介--------------------------------------------------------------1 1.2 什么是计算机------------------------------------------------------3 1.3 计算机组成-------------------------------------...
《C++ 入门》,作者:不详,pdf 格式,大小 ...第十六章 虚函数与多态性 第十七章 虚函数与抽象类 第十八章 运算符重载 第十九章 运算符重载、this 和and 第二十章 C++的预处理程序指令 附录A 术语汇编 附录B C++句法
很不错的教程,适合有一定语言基础的人看,txt格式 带源码 C++程(目录) 第1章 计算机与C++编程简介 ...第10章 虚函数与多态性 第11章 C++输入/输出流 第12章 模板 第13章 异常处理 第14章 文件处理
内容涉及对象的演化、数据抽象、隐藏实现、初始化与清除、函数重载与缺省参数、输入输出流介绍、常量、内联函数、命名控制、引用和拷贝构造函数、运算符重载、动态对象创建、继承和组合、多态和虚函数、模板和包容器...
鸡啄米的资料,大家可以上官网看。... 鸡啄米:C++编程入门系列之四十九(多态性:纯虚函数和抽象类) 第九部分:异常处理 鸡啄米:C++编程入门系列之五十(异常处理) 鸡啄米:C++编程入门系列之目录和总结
谭浩强教授创造了3个世界纪录:(1)20年来他(及和他人合作)共编著出版了130本计算机著作,此外主编了250多本计算机书籍,是出版科技著作数量最多的人。(2)他编著和主编的书发行量超过4500万册,是读者最多的...
谭浩强教授创造了3个世界纪录:(1)20年来他(及和他人合作)共编著出版了130本计算机著作,此外主编了250多本计算机书籍,是出版科技著作数量最多的人。(2)他编著和主编的书发行量超过4500万册,是读者最多的...
第10章 虚函数和多态性 10.1 简介 10.2 类型域和switch语句 10.3 虚函数 10.4 抽象基类和具体类 10.5 多态性 10.6 实例研究:利用多态性的工资单系统 10.7 新类和动态关联 10.8 虚析构函数 10.9 实例研究:...
12.9.1 虚函数和多态性 389 12.9.2 纯虚函数和抽象类 391 12.9.3 虚基类 391 12.9.4 抽象类和抽象数据类型 393 12.10 图的搜索算法 394 12.10.1 宽度优先搜索 394 12.10.2 类Network 395 12.10.3 BFS的实现 395 ...
8.1 多态性概述 8.2 运算符重载 8.3 虚函数 8.4 抽象类 8.5 程序实例——用变步长梯形积分算法求解函数的定积分 8.6 程序实例——对一个小型公司的人员信息管理系统程序的改进 8.7 小结 习题 第9章 群体类 9.1 线性...
12.9.1 虚函数和多态性 389 12.9.2 纯虚函数和抽象类 391 12.9.3 虚基类 391 12.9.4 抽象类和抽象数据类型 393 12.10 图的搜索算法 394 12.10.1 宽度优先搜索 394 12.10.2 类Network 395 12.10.3 BFS的实现 395 ...
12.9.1 虚函数和多态性 389 12.9.2 纯虚函数和抽象类 391 12.9.3 虚基类 391 12.9.4 抽象类和抽象数据类型 393 12.10 图的搜索算法 394 12.10.1 宽度优先搜索 394 12.10.2 类Network 395 12.10.3 BFS的实现 395 ...
12.9.1 虚函数和多态性 389 12.9.2 纯虚函数和抽象类 391 12.9.3 虚基类 391 12.9.4 抽象类和抽象数据类型 393 12.10 图的搜索算法 394 12.10.1 宽度优先搜索 394 12.10.2 类Network 395 12.10.3 BFS的实现 395 ...