继承与多态

#include <iostream>
using namespace std;

//声明类Point
class Point
{
public:
    Point(float x = 0, float y = 0); //构造函数

    void setPoint(float, float);//设置x\y坐标值
    float getX() const { return x; }//getX是Point 类中的常成员函数,可以引用,但不能修改本类的数据成员
    float getY() const { return y; }

    friend ostream &operator << (ostream &, const Point &);//重载<<

protected:
    float x, y;
};
//定义point类的成员函数
//Point 构造函数
Point::Point(float a, float b)
{
    x = a; y = b;
}
//设置x\y坐标值
void Point::setPoint(float a, float b)
{
    x = a; y = b;
}
//重载<<
ostream& operator << (ostream &output, const Point &p)
{
    output << "[" << p.x << "," <<p.y<< "]" << endl;
    return output;
}

分步调试
//int main()
//{
//  Point p(2.5, 6.4);
//  cout << "x=" << p.getX() << ".y=" << p.getY() << endl;
//  p.setPoint(8.8, 6.6);
//  cout << "p(new):" << p << endl;
//}

class Circle :public Point
{
public:
    Circle(float x = 0, float y = 0, float r = 0);
    void setRadius(float);
    float getRadius() const;
    float area() const;

    friend ostream &operator <<(ostream &, const Circle &);
protected:
    float radius;
};
//定义构造函数,派生类函数初始化
Circle::Circle(float a, float b, float r) :Point(a, b), radius(r){}

void Circle::setRadius(float r)
{
    radius = r;
}
float  Circle::getRadius()const { return radius; }

float Circle::area() const { return 3.14158*radius*radius; }

ostream &operator <<(ostream &output, const Circle &c)
{
    output << "center = [" << c.x << "," << c.y << "] , r = " << c.radius << ", area = " << c.area() << endl;
    return output;
}
//分步调试
//int main()
//{
//  Circle c(2.5, 6.4, 5.2);
//  cout << "original circle:\n x = " << c.getX() << ",y = " << c.getY() << ", r= " << c.getRadius() << ", area = " << c.area() << endl;
//  c.setRadius(7.5);
//  c.setPoint(5, 5);
//
//  cout << "new circle:\n" << c;
//  Point &pRef = c;//pRef 是point类的引用变量,被c初始化;
//  cout << "pRef:" << pRef;//输出pRef//调用Point<<
//  return 0;
//}
class Cylinder:public Circle
{
public:
    Cylinder(float x = 0, float y = 0, float r = 0, float h = 0);
    void setHeight(float);
    float getHeight() const;
    float area() const;//圆表面积
    float volume() const;//圆柱体积
    friend ostream &operator << (ostream &, const Cylinder&);

protected:
    float heigth;

};


Cylinder::Cylinder(float a, float b, float r, float h) :Circle(a, b, r), heigth(h){}

void Cylinder::setHeight(float h){ heigth = h; } 
float Cylinder::getHeight() const { return heigth; }

float Cylinder::area() const 
{ return 2 * Circle::area() + 2 * 3.14159*radius*heigth; }


float Cylinder::volume() const 
{ return Circle::area()*heigth; }

ostream &operator <<(ostream &output, const Cylinder & cy)
{
    output << "center = [ " << cy.x << "," << cy.y << "],r = " << cy.radius << ".h = " << cy.heigth << "\n area = " << cy.area()
        << ", volume = " << cy.volume() << endl;
    return output;
}

int main()
{
    Cylinder  cy1(3.5, 6.4, 5.2, 10);
    cy1.setHeight(15);
    cy1.setRadius(7.5);
    cy1.setPoint(5, 5);
    cout << "\n new cylinder:\n" << cy1;
    Point &pRef = cy1;
    cout << "\npRef as a Point :" << pRef;
    Circle &cRef = cy1;
    cout << "\ncRef as a Circle:" << cRef;
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值