/* (程序头部注释开始)
* 程序的版权和版本声明部分
* Copyright (c) 2011, 烟台大学计算机学院学生
* All rights reserved.
* 文件名称:虚函数、多态性、抽象类
* 作 者: 张培培
* 完成日期: 2012年 05月 10日
* 版 本 号:
* 对任务及求解方法的描述部分
* 输入描述:
* 问题描述:
* 程序输出:
* 程序头部的注释结束*/
任务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;
car.run();
Airplane airplane;
airplane.run();
cout<<"(b) 用指向基类的指针访问成员函数: "<<endl;
Vehicle *vp;
vp=&car;
vp->run();
vp=&airplane;
vp->run();
system("pause");
return 0;
}
(a) 直接用对象访问成员函数:
run a vehicle.
run a car.
run a airplane.
(b) 用指向基类的指针访问成员函数:
run a vehicle.
run a vehicle.
请按任意键继续. . .
任务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;
car.run();
Airplane airplane;
airplane.run();
cout<<"(b) 用指向基类的指针访问成员函数: "<<endl;
Vehicle *vp;
vp=&car;
vp->run();
vp=&airplane;
vp->run();
system("pause");
return 0;
}
(a) 直接用对象访问成员函数:
run a vehicle.
run a car.
run a airplane.
(b) 用指向基类的指针访问成员函数:
run a car.
run a airplane.
请按任意键继续. . .
任务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;
car.run();
Airplane airplane;
airplane.run();
cout<<"(b) 用指向基类的指针访问成员函数: "<<endl;
Vehicle *vp;
vp=&car;
vp->run();
vp=&airplane;
vp->run();
system("pause");
return 0;
}
(a) 直接用对象访问成员函数:
run a car.
run a airplane.
(b) 用指向基类的指针访问成员函数:
run a car.
run a airplane.
请按任意键继续. . .
虚函数:由任务1-2可以看出,虚函数允许在派生类中重新定义与基类同名的函数,并且可以通过基类指针或引用来访问基类和派生类中的同名函数。
多态性:多态性分为静多态和动多态,静多态发生在编译期,可以通过函数模板和重载函数实现;动多态发生在运行期,通过虚函数和指针来实现。
抽象类:凡是含有纯虚函数的类就是抽象类,它是一种特殊的类,作用是为一个类族提供一个公共接口;抽象类无法实例化,即无法定义一个抽象类的对象,只能通过继承机制,生成抽象类的非抽象派生类,然后才能实例化。。。。。。。。。。
本文详细介绍了C++中虚函数的概念、多态性的实现方式以及抽象类的使用场景。通过两个具体任务,展示了如何在C++中利用虚函数实现多态性,以及如何通过抽象类规范接口设计。任务一展示了直接通过对象访问成员函数与通过指向基类的指针访问成员函数的区别;任务二和任务三进一步探讨了虚函数和抽象类在不同访问方式下的行为表现。
1788

被折叠的 条评论
为什么被折叠?



