实验4 多态性实验

实验4  多态性实验

1、实验目的

(1)掌握运算符重载的基本方法;

(2)掌握虚函数的定义和使用方法;

(3)掌握纯虚函数和抽象类的概念和用法。

2、实验学时:6学时

3、实验内容

(1)声明Point类,有坐标x、y两个成员变量;对类重载++和--运算符,实现坐标值的改变。

实验4 多态性实验_第1张图片

#include
using namespace std;
class Point
{
    private:
        int x,y;
    public:
        Point();
        Point (int x1,int y1);//输入
        void out();//输出
        Point &operator ++(int);//前置
        Point &operator --(int);
        Point &operator ++();//后置
        Point &operator --();
};
Point::Point()
{
}
Point::Point(int x1,int y1)
{
    x=x1;
    y=y1;
}

Point &Point::operator ++(int)
{
    x++;
	y++;
	return *this;
}

Point &Point::operator --(int)
{
    x--;
    y--;
    return *this;
}

Point &Point::operator ++()
{
    ++x;
    ++y;
    return *this;
}

Point &Point::operator --()
{
    --x;
    --y;
    return *this;
}

void Point::out()
{
    cout<<"("<

(2)声明一个People(人员)类,具有属性如下:number(编号)、name(姓名)、sex(性别)、birthday(出生日期)、id(身份证号)。其中“出生日期”是一个子对象(请自行设计日期类)。用成员函数实现对人员信息的录入和显示。在主函数中定义People类的对象数组,录入数据并显示。同时为People重载运算符“==”,运算符“==”为判断两个People对应的id属性是否相同。

/*声明一个People(人员)类,具有属性如下:
number(编号)、name(姓名)、sex(性别)、birthday(出生日期)、id(身份证号)。
其中“出生日期”是一个子对象(请自行设计日期类)。用成员函数实现对人员信息的录入和显示。
在主函数中定义People类的对象数组,录入数据并显示。
同时为People重载运算符“==”,运算符“==”为判断两个People对应的id属性是否相同。*/
#include
#include
using namespace std;
//birthday类
class birthday
{
    private:
        int year,month,day;
    public:
        birthday();//无参构造函数
        birthday(int y,int m,int d);//有参构造函数
        int get_date();//输入出生日期
        void out_date();//输出出生日期
};
//无参构造函数
birthday::birthday()
{}
//有参构造函数
birthday::birthday(int y,int m,int d)
{
    year=y;
    month=m;
    day=d;
}
//输入出生日期
int birthday::get_date()
{
    cout<<"输入出生日期:";
    cin>>day>>month>>year;
}
//输出出生日期
void birthday::out_date()
{
    cout<<"输入出生日期:"<>number;
    cout<<"姓名";
    cin>>name;
    cout<<"性别";
    cin>>sex;
    birthday::get_date();
    cout<<"身份证号";
    cin>>id;
    return 0;
}
//重载运算符==
People &operator==(People &p1,People &p2)
{
    if(p2.id==p1.id)
    {
       cout<<"这两个的id相等"<

(3)声明一个车Vehicle基类,有run、stop等成员函数,由此派生出自行车Bicycle类、汽车Motorcar类,从Bicycle、Motorcar类派生出摩托车Motorcycle类,它们都有run、stop等成员函数,观察虚函数的作用。

#include

using namespace std;  

class Vehicle{

  public : 

    void Run(){cout<<"Vehicle Run!"<

       void Stop(){cout<<"Vehicle Stop!"<

};   

 

class Bicycle: virtual public Vehicle{                  //去掉virtual

  public:      

         void Run(){cout<<"Bicycle Run!"<

 

        void Stop(){cout<<"Bicycle Stop!"<

};   

 

class Motorcar:  virtual public Vehicle{               //去掉virtual

  public:     

       void Run(){cout<<"Motorcar Run!"<

       void Stop(){cout<<"Motorcar Stop!"<

};   

 

 

class Motorcycle: public Bicycle,public Motorcar{

  public:     

       void Run(){cout<<"Motorcycle Run!"<

       void Stop(){cout<<"Motorcycle Stop!"<

};  

 

void display(Vehicle *ptr)

      {  ptr->Run();  ptr->Stop();    

       cout<

void main()

{ Motorcycle ob;

  ob.Run();

  ob.Stop();

  display(&ob);

}

 

  • 观察运行结果。
  • 实验4 多态性实验_第2张图片
  • 上面去掉virtual 结果如何?
  • 实验4 多态性实验_第3张图片
  • 将    void Run(){cout<<"Vehicle Run!"<

         void Stop(){cout<<"Vehicle Stop!"<

改为:virtual void Run(){cout<<"Vehicle Run!"<

         virtual void Stop(){cout<<"Vehicle Stop!"<

   运行结果如何?想想为什么?

实验4 多态性实验_第4张图片

由于bicycle与motorcar都继承了同一个基类,所以必须使用虚继承,不会出现二义性,不会报异常的错误。

 

 

你可能感兴趣的:(实验,C++,类,c++,多态)