实验8 多态性 (该实验环境为visual studio 2019,全部代码均已调试可运行) 一、 实验目的 (1) 掌握运算符重载的方法 (2) 学习使用虚函数实现动态多态性 二、 实验任务 (1) 声明Point类,有坐标_x,_y两个成员变量;对Point类重载“++(自增)”、“——(自减)”运算符,实现对坐标值的改变。 (2) 声明一个车(vehicle)基类,有Run、Stop等成员函数,由此派生出自行车(bicycle)类、汽车(motorcar)类,从bicycle和motorcar派生出摩托车(motorcycle)类,它们都有Run、Stop等成员函数。观察虚函数的作用。 三、 实验步骤 (1) 编写程序声明Point类,在类中声明整型的私有成员变量_x,_y,声明成员函数Point&operator++();Point&operator++(int);以实现对Point类重载“++”运算符,声明成员函数Point&operator–();Point&operator–(int);以实现对Point类重载“–”运算符,实现对坐标值的改变。 代码:
#include
using namespace std;
class Point {
public:
Point(int x,int y):_x(x),_y(y) { }
void showPoint() const;
Point& operator++();
Point operator++(int);
Point& operator--();
Point operator--(int);
private:
int _x, _y;
};
void Point::showPoint() const {
cout
Point old = *this;
++(*this);
return old;
}
Point& Point::operator--() {
_x--;
_y--;
return *this;
}
Point Point::operator--(int) {
Point old = *this;
--(*this);
return old;
}
int main()
{
Point a(2,2);
a.showPoint();
(a++).showPoint();
(++a).showPoint();
(a--).showPoint();
(--a).showPoint();
return 0;
}
运行结果: (2) 编写程序声明一个车(vehicle)基类,有Run,Stop等成员函数,由此派生出自行车(bicycle)类、汽车(motorcar)类,从bicycle和motorcar派生出摩托车(motorcycle)类,它们都有Run,Stop等成员函数。在main()函数中声明vehicle、bicycle、motorcar、motorcycle的对象,调用其Run()、Stop()函数,观察其执行情况。再分别用vehicle类型的指针来调用这几个对象的成员函数,看看能否成功;把Run、Stop声明为虚函数,再试试看。 代码:
#include
using namespace std;
class vehicle {
public:
void run() { cout
public:
void run() { cout
public:
virtual void run() { cout
public:
void run() { cout
ptr->run();
ptr->stop();
}
int main()
{
vehicle a;
bicycle b;
motorcar c;
motorcycle d;
fun(&a);
fun(&b);
fun(&c);
fun(&d);
return 0;
}
运行结果: 把Run、Stop声明为虚函数,再试试看:
#include
using namespace std;
class vehicle {
public:
virtual void run() { cout
public:
void run() { cout
public:
virtual void run() { cout
public:
void run() { cout |