zoukankan      html  css  js  c++  java
  • C++实训(3.1)

    多态的实现

    源程序:

    #include <iostream>
    #include <cmath>
    using namespace std;
    class CShape
    {
    protected:
    double acreage;
    public:
    CShape()
    {
    //cout<<"基类构造函数"<<endl;
    };
    virtual ~CShape()
    {
    //cout<<"基类析构函数"<<endl;
    }
    virtual double CalAcr()
    {
    return 0;
    };
    virtual void setAcreage(double acre) {};
    virtual void PrintInfo() {};
    };
    class CRectangle :public CShape
    {
    double width, high;
    public:
    CRectangle(double w, double h)
    {
    //cout<<"矩形带参构造函数"<<endl;
    width = w;
    high = h;
    };
    CRectangle()
    {
    //cout<<"矩形无参构造函数"<<endl;
    width = 0;
    high = 0;
    };
    ~CRectangle()
    {
    //cout<<"矩形析构函数"<<endl;
    }
    double CalAcr(); //前面加不加virtual,它都是虚函数,下面两个也同样
    void PrintInfo();
    void setAcreage(double);
    };
    class CCircle :public CShape
    {
    double radius;
    public:
    CCircle(double r)
    {
    //cout<<"圆形带参构造函数"<<endl;
    radius = r;
    };
    CCircle()
    {
    //cout<<"圆形无参构造函数"<<endl;
    radius = 0;
    };
    ~CCircle()
    {
    //cout<<"圆形析构函数"<<endl;
    }
    virtual double CalAcr();
    virtual void PrintInfo();
    virtual void setAcreage(double);
    };
    class CTriangle :public CShape
    {
    double a, b, c;
    public:
    CTriangle(double a, double b, double c)
    {
    //cout<<"三角形带参构造函数"<<endl;
    this->a = a;
    this->b = b;
    this->c = c;
    };
    CTriangle()
    {
    //cout<<"三角形无参构造函数"<<endl;
    a = 0;
    b = 0;
    c = 0;
    };
    ~CTriangle()
    {
    //cout<<"三角形析构函数"<<endl;
    };
    virtual double CalAcr();
    virtual void PrintInfo();
    virtual void setAcreage(double);
    };
    double CRectangle::CalAcr()
    {
    return width * high;
    }
    void CRectangle::PrintInfo()
    {
    cout << "矩形. 宽度=" << this->width << ",高度 =" << this->high << ", 面积" << this->acreage << endl;
    }
    void CRectangle::setAcreage(double acre)
    {
    acreage = acre;
    }
    double CCircle::CalAcr()
    {
    return 3.14 * radius * radius;
    }
    void CCircle::PrintInfo()
    {
    cout << "圆. 半径=" << this->radius << ",面积" << this->acreage << endl;
    }
    void CCircle::setAcreage(double acre)
    {
    acreage = acre;
    }
    double CTriangle::CalAcr()
    {
    double p = (a + b + c) / 2.0;
    return sqrt(p * (p - a) * (p - b) * (p - c));
    }
    void CTriangle::PrintInfo()
    {
    cout << "三角形.三条边分别是: " << this->a << "," << this->b << "," << this->c << ",面积=" << this->acreage << endl;
    }
    void CTriangle::setAcreage(double acre)
    {
    acreage = acre;
    }
    CShape* pShapes[100];
    int main()
    {
    int i, n;
    double temp1, temp2, temp3;
    CRectangle* pr; CCircle* pc; CTriangle* pt;
    cin >> n;
    for (i = 0; i < n; ++i)
    {
    char c;
    cin >> c;
    switch (c)
    {
    case'R':case'r':
    cin >> temp1 >> temp2;
    pr = new CRectangle(temp1, temp2);
    pr->setAcreage(pr->CalAcr());
    pShapes[i] = pr;
    break;
    case'C':case'c':
    cin >> temp1;
    pc = new CCircle(temp1);
    pc->setAcreage(pc->CalAcr());
    pShapes[i] = pc;
    break;
    case'T':case't':
    cin >> temp1 >> temp2 >> temp3;
    pt = new CTriangle(temp1, temp2, temp3);
    pt->setAcreage(pt->CalAcr());
    pShapes[i] = pt;
    break;
    }
    }
    if (n == 1)
    cout << "共有 " << n << "种图形,它是" << endl;
    else
    cout << "共有 " << n << "种图形,分别是" << endl;
    for (i = 0; i < n; ++i)
    {
    //cout<<"1"<<endl;
    pShapes[i]->PrintInfo();
    delete pShapes[i];
    }
    system("pause");
    return 0;
    }

    //c++删除空白行    用空格替换 ^s*  

    运行结果:

  • 相关阅读:
    spark编译
    使用MapReduce实现两个文件的Join操作
    响应式 Web 设计
    响应式 Web 设计
    900W+数据只用300ms搞定!SQL查询优化这样做最快耗时347ms
    响应式 Web 设计
    CSS3 多媒体查询实例
    CSS3 多媒体查询:查找设备的类型,CSS3 根据设置自适应显示
    CSS3 弹性盒子(Flex Box):确保元素拥有恰当的行为的布局方式
    CSS3 框大小:padding(内边距) 和 border(边框)
  • 原文地址:https://www.cnblogs.com/duanqibo/p/13149859.html
Copyright © 2011-2022 走看看