2012年 上半年 第十三周 C++程序设计 (三十七)
2012-05-15 19:29
465 查看
【任务】阅读下面的程序 #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)请写出程序的执行结果,并在上机时对照理解
#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)如果将Vehicle类的定义修改为虚函数,其余不变,请写出程序的执行结果,并在上机时对照理解
class Vehicle
{public:
virtual void run() const { cout << "run a vehicle. "<<endl; } //(2) run()为虚函数
};
#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)如果将Vehicle类的定义修改为纯虚函数,找出main()函数中将使编译出错的行删除(或改为注释),请写出程序的执行结果,并在上机时对照理解
class Vehicle
{public:
virtual void run() const = 0; //(3) run()为纯虚函数
};
#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(); system("pause"); return 0; }
结论:
(1)纯虚函数是不能被调用的!
(2)派生类是基类的具体化!
(3)抽象类作为共同基类!
相关文章推荐
- 2012年 上半年 第十三周 C++程序设计 (三十九)
- 2012年 上半年 第十三周 C++程序设计 (三十八)
- 2012年 上半年 第十三周 C++程序设计 (四十)
- 2012年 上半年 第二周 C++ 程序设计 (二)
- 2012年 上半年 第八周 C++程序设计 (二十五)
- 2012年 上半年 第九周 C++程序设计 (二十七)
- 2012年 上半年 第十周 C++程序设计 (三十二)
- 2012年 上半年 第二周 C++程序设计 (三)
- 2012年 上半年 第五周 C++程序设计 (十一)
- 2012年 上半年 第七周 C++程序设计 (二十二)
- 2012年 上半年 第九周 C++程序设计 (二十八)
- 2012年 上半年 第十周 C++程序设计 (三十三)
- 2012年 上半年 第三周 C++程序设计 (四)
- 2012年 上半年 第五周 C++程序设计 (十二)
- 2012年 上半年 第九周 C++程序设计 (二十九)
- 2012年 上半年 第十周 C++程序设计 (三十一)
- 2012年 上半年 第十二周 C++程序设计 (三十五)
- 2012年 上半年 第三周 C++程序设计 (五)
- 2012年 上半年 第三周 C++程序设计 (七)
- 2012年 上半年 第五周 C++程序设计 (十三)