C++编程:多态

要求
(1)掌握C++中运算符重载的机制和运算符重载的方式;
(2)理解类型转换的必要性,掌握类型转换的使用方法;
(3)理解多态性,掌握虚函数的设计方法;
(4)掌握纯虚函数和抽象类的使用方法。

  1. 定义point类,有坐标x,y两个数据成员,对point类重载“++”(自增),–(自减)运算符,实现对坐标值的改变。
#include<bits\stdc++.h>
using namespace std;
class Point
{
    protected:
    int x,y;
    public:
    Point(int a,int b):x(a),y(b){};
    Point &operator ++(int)
    {
        x+=1;
        y+=1;
        return *this;
    }
    Point &operator --()
    {
        x-=1;
        y-=1;
        return *this;
    }
    void show()
    {
        cout<<x<<","<<y<<endl;
    }
};

int main()
{
    Point p1(2,3);
    p1.show();
    p1++;
    p1.show();
    --p1;
    p1.show();
    system("pause");
    return 0;
}

在这里插入图片描述

  1. 声明一个车(Vehicle)基类,有Run、Stop等成员函数,由此派生出自行车(Bicycle)类、汽车(car)类,从自行车和汽车类派生出摩托车(Motorcycle)类,它们都有Run()、Stop()等成员函数。利用纯虚函数和抽象类解决问题。(注意和实验三第(2)题实现方法的区别,考察动态连编和静态连编的不同实验结果)
#include<bits\stdc++.h>
//纯虚函数,和抽象类
using namespace std;
class Vehicle
{
    public:
    virtual void Run()=0;
    virtual void Stop()=0;

};
class Bicycle:public Vehicle
{
    public:
    virtual void Run()
    {
        cout<<"Bicycle Run"<<endl;
    }
    virtual void Stop()
    {
        cout<<"Bicycle Stop"<<endl;
    }
};
class Car:public Vehicle
{
    public:
    virtual void Run()
    {
        cout<<"Car Run"<<endl;
    }
    virtual void Stop()
    {
        cout<<"Car Stop"<<endl;
    }
};
class Motorcycle:public Bicycle,public Car
{
    public:
    virtual void Run()
    {
        cout<<"Motorcycle Run"<<endl;
    }
    virtual void Stop()
    {
        cout<<"Motorcycle Stop"<<endl;
    }
};
int main()
{
    Bicycle a1;
    Car a2;
    Motorcycle a3;
    Vehicle *p;
    p=&a1;
    p->Run();
    p->Stop();
    p=&a2;
    p->Run();
    p->Stop();
    Motorcycle*p1;
    p1=&a3;
    p1->Run();
    p1->Stop();
    p->Run();

    system("pause");
    return 0;

}

在这里插入图片描述

  1. 声明一个shape基类,有计算面积arae()成员函数,由此派生出正方形类(Square)、直角三角形类(Triangle)、圆类(Circle),它们都有arae()成员函数。利用虚函数编程计算正方形、直角三角形和圆的面积之和。
#include<bits\stdc++.h>
using namespace std;
class shape
{
    public:
    double areaS;
    void area(double a)
    {
        areaS=a;
        cout<<areaS<<endl;
    }
};
class Square:virtual public shape
{
    protected:
    double area1;//正方形的面积
};
class Triangle:virtual public shape
{
   protected:
    double area2;//三角形的面积

};
class Circle:virtual public shape
{
   protected:
    double area3;//圆的面积
};
class All:public Square,public Triangle,public Circle
{
    public:
    All(double a,double b,double c)
    {
        Square::area1=a;
        Triangle::area2=b;
        Circle::area3=c;
        areaS=Square::area1+Triangle::area2+Circle::area3;
        
    }
};
int main()
{
    All a1(10.0,11.1,12.4);
    a1.area(a1.areaS);
    system("pause");
    return 0;
}

在这里插入图片描述

注意

  1. 注意为了防止继承过程二义性出现而报错,对于继承时要虚继承;2.重载运算符,前置自加operator不需要参数,而后置自加需要有int类型参数,不过不需要给出具体变量;
  2. 多态的实现,需要用到基类的定义的指针变量,传入派生类地址来实现多态;
  3. 多态是方法的多态,属性没有多态
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@小冯@

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值