您的位置:首页 > 编程语言 > C语言/C++

C++学习笔记__类的派生和多态性

2015-06-22 13:37 549 查看

类的派生和多态性的应用举例

例子:先建立一个Point类,包含数据成员x,y(坐标点)。以它为基类,派生出一个Circle类,增加数据成员r(半径),再以Circle类为直接基类,派生出一个Cylinder(圆柱体)类,再增加数据成员h(高)。编写程序,重载运算符“<<”和“>>”,使之能用于输出以上类对象。

#include<iostream>
using namespace std;
class Point
{
public:
	Point(float x = 0, float y = 0);
	void setPoint(float, float);
	float getX() const { return x; }
	float getY() const { return y; }
	friend ostream & operator<<(ostream &, const Point &);
protected:
	float x, y;
};
Point::Point(float a, float b)
{
	x = a; y = b;
}
void Point::setPoint(float a, float b)
{
	x = a; x = b;
}
ostream & operator<<(ostream &output, const Point &p)
{
	output << "[" << p.x << "," << p.y << "]" << endl;
	return output;
}
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 &);
private:
	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.14159*radius*radius;
}
ostream &operator<<(ostream &output, const Circle &c)
{
	output << "Center=[" << c.x << "," << c.y << "],r=" << c.radius 
		    << ",area=" << c.area() << endl;
	return output;
}
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 height;
};
Cylinder::Cylinder(float a, float b, float r, float h) :Circle(a, b, r), height(h){} 
void Cylinder::setHeight(float h)
{ 
	height = h; 
}
float Cylinder::getHeight()const
{
	return height; 
}
float Cylinder::area()const 
{
	return 2 * Circle::area() + 2 * 3.14159*radius*height;
}
float Cylinder::volume()const 
{ 
	return Circle::area()*height; 
} 
ostream &operator <<(ostream &output, const Cylinder&cy)
{
	output << "Center = [<< cy.x << , << cy.y << ], r = "<< cy.radius 
		<< ", h = "<< cy.height << "area = "<< cy.area() << ", volume = " 
		<< cy.volume() << endl; 
	return output;
}
int main()
{
	Cylinder cy1(3.5, 6.4, 5.2, 10);
	cout << "original cylinder : x = " << cy1.getX() << ", y = "<< cy1.getY() << ",r = "
		<< cy1.getRadius() << ", h = "<< cy1.getHeight() << "area = "<< cy1.area()
		<< ", volume = "<< cy1.volume() << endl;
		cy1.setHeight(15);
		cy1.setRadius(7.5);
		cy1.setPoint(5, 5);
		cout << "new cylinder : "<< cy1;
		Point &pRef = cy1;
	cout << "pRef as a Point : "<< pRef;
		Circle &cRef = cy1;
	cout << "cRef as a Circle : " << cRef;
	system("pause");
	return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: