对于继承关系
// Inherit_Point.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include<iostream>
#include<stdlib.h>
using namespace std;
/*****************************Point**************************************/
class Point
{
friend ostream&operator<<(ostream&, Point&);
public:
Point();
Point(double xval, double yval);
~Point();
protected:
double x;
double y;
};
Point::Point():x(0.0),y(0.0)//默认构造
{
}
Point::Point(double xval, double yval) : x(xval), y(yval)//普通构造
{
}
Point::~Point()
{
}
ostream& operator<<(ostream& os, Point& apoint)
{
os << "Point :x:y " << apoint.x << ", " << apoint.y << "\n";
return os;
}
/********************************Circle*********************************/
class Circle:public Point
{
friend ostream& operator<<(ostream&, Circle&);
public:
Circle();
Circle(double r, double xval, double yval);
~Circle();
double area() { return (3.1415926*radius*radius); }
protected:
double radius;
};
Circle::Circle():Point(),radius(0.0)
{
}
Circle::Circle(double r, double xval, double yval) : Point(xval, yval), radius(r)
{
}
Circle::~Circle()
{
}
ostream& operator<<(ostream& os, Circle& aCircle)
{
os << "Circle:radius: " << aCircle.radius;
os << aCircle.x << "\n";//x,y是继承而来的成员,由于是保护类成员,可以直接使用,若果是私有成员,则必须使用共有函数借口进行访问
os << aCircle.y << "\n";
return os;
}
/************************************Cylinder*****************************************/
class Cylinder:public Circle
{
friend ostream& operator<<(ostream&, Cylinder&);
public:
Cylinder();
Cylinder(double hv, double rv, double xv, double yv);
double area() { return 2 * Circle::area() + 2 * 3.1415926*radius*radius; }
~Cylinder();
private:
protected:
double height;
};
Cylinder::Cylinder():Circle(),height(0.0)
{
}
Cylinder::Cylinder(double hv, double rv, double xv, double yv) : Circle(xv, yv, rv), height(hv)
{
}
Cylinder::~Cylinder()
{
}
ostream& operator<<(ostream& os, Cylinder& acylinder)
{
os << "cylinder dimensions: ";
os << "x: " << acylinder.x;
os << ", y: " << acylinder.y;
os << " , radius: " << acylinder.radius;
os << ", height: " << acylinder.height << endl;
return os;
}
/*****************************************main()**********************************************/
int main()
{
Point p(2.0, 3.0);
Circle c(7.0, 6.0, 5.0);
Cylinder cyl(10.0, 11.0, 12.0, 13.0);
cout << p;
cout << c;
cout << "area circle: " << c.area() << endl;
cout << cyl;
cout << "area cylinder: " << cyl.area() << endl;
cout << "aera cylinder base is: "
<< cyl.Circle::area() << endl;
system("pause");
return 0;
}