g
y
7
7
7
7

Object类的派生-c++

/*
 * @Issue: 生成一个Object抽象类
 * @Author: 一届书生
 * @LastEditTime: 2020-02-24 10:34:13
 */
#include<iostream>
using namespace std;

// Point类
class Point{
    int x,y;
public:
    // 带参构造函数
    Point(int x1,int y1){
        this->x=x1;
        this->y=y1;
    }
    // 默认构造函数
    Point(){
        this->x=0;
        this->y=0;
    }
    // 析构函数
    ~Point(){}

    int GetX(){
        return x;
    }
    int GetY(){
        return y;
    }
    void setX(int x1){
        x=x1;
    }
    void setY(int y1){
        y=y1;
    }

    void MoveTo(int x1,int y1){
        setX(x1);
        setY(y1);
    }
    void Display(){
        cout<<"x:"<<x<<endl;
        cout<<"y:"<<y<<endl;
    }


};

// Object抽象类
class Object{
public:
    virtual double CalArea()=0;
    virtual bool IsIn(Point p)=0;
};

// 矩形Rect类
class Rect:public Object{
    Point lt;   //左上角
    Point rb;   //右下角
public:
    // 初始化列表构造函数
     Rect(Point p1,Point p2):lt(p1),rb(p2){}
    
    // 求面积函数
    double CalArea(){
        return (rb.GetX()-lt.GetX())*(rb.GetY()-lt.GetY());
    }
    // 判断点是否在矩阵内(边缘也算)
    bool IsIn(Point p){
        return (p.GetX()>=lt.GetX()&&p.GetX()<=rb.GetX()
        &&p.GetY()>=lt.GetY()&&p.GetY()<=rb.GetY());
    }
};


int main(){
    Object *obj[2];
    obj[0]=new Rect(Point(0,0),Point(3,3));
    cout<<obj[0]->CalArea()<<endl;
    return 0;
}

  

posted @ 2020-02-24 10:36  gy77  阅读(534)  评论(0编辑  收藏  举报