第十三周 阅读程序 2
2015-06-03 08:48
323 查看
问题及代码:
运行结果:
(1)请回答:当基类的指针指向派生类时,用指针调用同名成员函数,执行的是基类的成员函数,还是派生类的成员函数?为什么会这样?
答:执行基类的成员函数,因为没有声明为虚函数。
如果将Vehicle类的定义修改为虚函数,其余不变,请写出程序的执行结果
******如果将Vehicle类的定义修改为虚函数,其余不变,请写出程序的执行结果
class Vehicle {
public:
virtual void run() const { cout << "run a vehicle. "<<endl; } //(2) run()为虚函数
};
问题及代码:
运行结果:
(2)请回答:当基类的指针指向派生类时,用指针调用同名虚成员函数,执行的是基类的成员函数,还是派生类的成员函数?为什么会这样?什么是多态性?请结合本例的运行结果说明。
答:因为基类的成员函数为虚函数,调用函数是需要看指针指向;函数的多态性是指一个函数被定义成多个不同参数的函数,它们一般被存在头文件中,当你调用这个函数,针对不同的参数,就会调用不同的同名函数。
*******如果将Vehicle类的定义修改为纯虚函数,找出main()函数中将使编译出错的行删除(或改为注释),请写出程序的执行结果,并在上机时对照理解
class Vehicle{
public:
virtual void run() const = 0; //(3) run()为纯虚函数,const意指其为常成员函数,并非纯虚函数之必要
};
问题及代码:
运行结果:
(3)请回答:当基类同名成员函数定义为纯虚函数后,发生了什么现象?为什么会这样?
答:程序出现编译错误,因为在这个程序中,纯虚函数是没有对象的。
修改后程序:
运行结果:
/* *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; }
运行结果:
相关文章推荐
- 2015年第十三周项目一:动物这样叫(3)
- 第十二周项目一3动物这样叫
- 第十三周 阅读程序(3)
- struts2学习笔记之十八(下载文件)
- 解密javascript模块加载器require.js
- 第13周项目2-形状类族的中的纯虚函数
- jQuery实现文本展开收缩特效
- 第13周项目 程序阅读(5)
- Installing Node.js on pi
- Read and Write NSArray, NSDictionary and NSSet to a File
- [Android实例] 细谈Ble4.0 APP开发
- 第十三周项目三:立体类族共有的抽象类
- elasticsearch的实现全文检索
- MySQL按照汉字拼音首字母排序
- OJ对象数组输入与输出
- 第十三周 项目2-形状类族的中的纯虚函数
- 第13周 【项目 - 链表类】阅读项目
- 第十三周项目1--动物这样叫(2)
- C++刷题——2802: 判断字符串是否为回文
- 第13周项目 程序阅读(4)