码迷,mamicode.com
首页 > 编程语言 > 详细

C语言 百炼成钢27

时间:2016-07-10 21:42:06      阅读:209      评论:0      收藏:0      [点我收藏+]

标签:

/*
题目63:编写C++程序完成以下功能:
(1)声明一个纯虚函数类Shape(形状),其中包含来计算面积、计算周长的方法;
(2)从Shape派生两个类矩形和圆形;
(3)从矩形派生正方形;
(4)分别实现派生类构造函数、析构函数和其他方法;
(5)创建派生类的对象,观察构造函数、析构函数调用次序;
(6)利用抽象类做函数参数(基类指针指向子类对象,多态特性),计算不同对象的面积和周长。

*/

#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;

#define PI 3.14

//形状类
class Shape{
public:
    //计算面积
    virtual double ComputeArea() = 0;
    //计算周长
    virtual double ComputePerimeter() = 0;
    //返回名称
    virtual char* PrintName() = 0;
};

//圆类
class Circle :public Shape{
public:
    Circle(int r){
        this->r = r;
    }
    virtual char* PrintName(){
        return "";
    }
    //计算面积
    virtual double ComputeArea(){
        return PI*r*r;
    }
    //计算周长
    virtual double ComputePerimeter(){
        return 2* PI*r;
    }
private:
    int r;
};

//矩形类
class Rectangle :public Shape{
public:
    Rectangle(int w,int h){
        width = w;
        height = h;
    }
    virtual char* PrintName(){
        return "矩形";
    }
    //计算面积
    virtual double ComputeArea(){
        return width*height;
    }
    //计算周长
    virtual double ComputePerimeter(){
        return 2 * (width+height);
    }
protected:
    int width;
    int height;
};

//正方形类
class Square :public Rectangle{
public:
    Square(int edge) :Rectangle(edge, edge){}
    virtual char* PrintName(){
        return "正方形";
    }
};

void ProtectA(Shape *sp){
    printf("%s的面积是%f\n", sp->PrintName(), sp->ComputeArea());
    printf("%s的周长是%f\n", sp->PrintName(), sp->ComputePerimeter());
}

void main(){
    //定义圆对象
    Circle c1(1);
    ProtectA(&c1);
    //定义矩形对象
    Rectangle r1(2, 3);
    ProtectA(&r1);
    //定义正方形对象
    Square sq1(5);
    ProtectA(&sq1);
    printf("程序执行完毕!\n");
    system("pause");
}

技术分享

C语言 百炼成钢27

标签:

原文地址:http://www.cnblogs.com/zhanggaofeng/p/5658556.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!