第十三周 阅读程序 2
来源:互联网 发布:红太阳炒股软件 编辑:程序博客网 时间:2024/06/05 04:53
问题及代码:
/**Copyright (c)2014,烟台大学计算机与控制工程学院*All rights reserved.*文件名称:Project.cpp*作 者:chenqin.*完成日期:2015年6月3日*版 本 号: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;}
运行结果:
(1)请回答:当基类的指针指向派生类时,用指针调用同名成员函数,执行的是基类的成员函数,还是派生类的成员函数?为什么会这样?
答:执行基类的成员函数,因为没有声明为虚函数。
如果将Vehicle类的定义修改为虚函数,其余不变,请写出程序的执行结果
******如果将Vehicle类的定义修改为虚函数,其余不变,请写出程序的执行结果
class Vehicle {
public:
virtual void run() const { cout << "run a vehicle. "<<endl; } //(2) run()为虚函数
};
问题及代码:
/**Copyright (c)2014,烟台大学计算机与控制工程学院*All rights reserved.*文件名称:Project.cpp*作 者:chenqin.*完成日期:2015年6月3日*版 本 号:v1.0**问题描述:阅读程序*程序输入:略*程序输出:略*/#include <iostream>using namespace std;class Vehicle //交通工具{public: virtual void run() const { cout << "run a vehicle. "<<endl; }//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;}
运行结果:
(2)请回答:当基类的指针指向派生类时,用指针调用同名虚成员函数,执行的是基类的成员函数,还是派生类的成员函数?为什么会这样?什么是多态性?请结合本例的运行结果说明。
答:因为基类的成员函数为虚函数,调用函数是需要看指针指向;函数的多态性是指一个函数被定义成多个不同参数的函数,它们一般被存在头文件中,当你调用这个函数,针对不同的参数,就会调用不同的同名函数。
*******如果将Vehicle类的定义修改为纯虚函数,找出main()函数中将使编译出错的行删除(或改为注释),请写出程序的执行结果,并在上机时对照理解
class Vehicle{
public:
virtual void run() const = 0; //(3) run()为纯虚函数,const意指其为常成员函数,并非纯虚函数之必要
};
问题及代码:
/**Copyright (c)2014,烟台大学计算机与控制工程学院*All rights reserved.*文件名称:Project.cpp*作 者:chenqin.*完成日期:2015年6月3日*版 本 号:v1.0**问题描述:阅读程序*程序输入:略*程序输出:略*/#include <iostream>using namespace std;class Vehicle //交通工具{public: virtual void run() const=0; //run()为纯虚函数,const意指其为常成员函数,并非纯虚函数之必要};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;}
运行结果:
(3)请回答:当基类同名成员函数定义为纯虚函数后,发生了什么现象?为什么会这样?
答:程序出现编译错误,因为在这个程序中,纯虚函数是没有对象的。
修改后程序:
/**Copyright (c)2014,烟台大学计算机与控制工程学院*All rights reserved.*文件名称:Project.cpp*作 者:chenqin.*完成日期:2015年6月3日*版 本 号:v1.0**问题描述:阅读程序*程序输入:略*程序输出:略*/#include <iostream>using namespace std;class Vehicle //交通工具{public: virtual void run() const=0; //run()为纯虚函数,const意指其为常成员函数,并非纯虚函数之必要};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; Car car; Airplane airplane; car.run(); airplane.run(); cout<<"(b)用指向基类的指针访问成员函数: "<<endl; Vehicle *vp; vp=&car; vp->run(); vp=&airplane; vp->run(); return 0;}
运行结果:
- 第十三周阅读程序2
- 第十三周阅读程序2
- 第十三周 阅读程序 2
- 第十三周阅读程序2
- 第十三周 程序阅读
- 第十三周 阅读程序
- 第十三周程序阅读
- 第十三周-阅读程序
- 第十三周-阅读程序
- 第十三周-阅读程序
- 第十三周--阅读程序
- 第十三周阅读程序
- 第十三周 阅读程序 2 虚析构函数
- 第十三周--阅读程序(2)
- 第十三周阅读程序2:虚析构函数
- 第十三周 阅读程序(2)
- 第十三周 课后实践:阅读程序2
- 第十三周项目-阅读程序-2
- 第13周项目 程序阅读(5)
- 2015年第十三周项目一:动物这样叫(3)
- 第十二周项目一3动物这样叫
- struts2学习笔记之十八(下载文件)
- 第十三周项目一动物这样叫
- 第十三周 阅读程序 2
- 第十三周项目一 动物这样叫
- Logback.xml 配置文件
- 开源 java CMS - FreeCMS2.3 移动app生成首页数据
- 第13周 【项目 - 链表类】(2)
- Java IO流总结
- 非常简单的语音朗读功能
- Android 实现记住用户名和密码的功能
- 第13周项目 程序阅读(6)