#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;
}
继承与多态
最新推荐文章于 2022-04-13 12:34:21 发布