1. 程式人生 > >第十三週上機實踐——專案3-形狀類族中的純虛擬函式

第十三週上機實踐——專案3-形狀類族中的純虛擬函式

/* 
 *Copyright (c)2016,煙臺大學計算機與控制工程學院 
 *All rights reserved. 
 *檔名稱:main.cpp,Shape.h,Shape.cpp 
 *作    者:郭永恆 
 *完成日期:2016年5月28日 
 *版 本 號:v1.0 
 * 
 *問題描述:定義抽象基類Shape,並派生出三個類,Circlr,Rectangle,Triangle 
 */  

Shape.h

#ifndef SHAPE_H_INCLUDED
#define SHAPE_H_INCLUDED

class Shape
{
public:
    virtual double area() = 0;
};

class Circle:public Shape
{
public:
    Circle(double r = 0):radius(r){}
    double area();
private:
    constexpr static double PI = 3.1415926;
    double radius;
};

class Rectangle:public Shape
{
public:
    Rectangle(double h = 0,double w = 0):height(h),width(w){}
    double area();
private:
    double height;
    double width;
};

class Triangle:public Shape
{
public:
    Triangle(double bM = 0, double h = 0):bottomMargin(bM),height(h){}
    double area();
private:
    double bottomMargin;
    double height;
};
#endif // SHAPE_H_INCLUDED
Shape.cpp
#include "Shape.h"

double Circle::area()
{
    return radius * radius * PI;
}

double Rectangle::area()
{
    return height * width;
}

double Triangle::area()
{
    return (height * bottomMargin)/2;
}

main.cpp
#include <iostream>
#include "Shape.h"
using namespace std;


int main()
{
    Circle c1(12.6),c2(4.9);
    Rectangle r1(4.5,8.4),r2(5.0,2.5);
    Triangle t1(4.5,8.4),t2(3.4,2.8);
    Shape* pt[6] = {&c1,&c2,&r1,&r2,&t1,&t2};
    double areas = 0.0;
    for(int i = 0; i < 6; ++i)
        areas += pt[i]->area();
    cout << "total of all areas =" << areas << endl;
    return 0;
}

執行結果: