class Shape //抽象基類
{
public:
virtual float area() const {return 0.0;} //虛函式
virtual float volume() const {return 0.0;} //虛函式
virtual void shapName() const = 0; //純虛函式
};
class Point:public Shape //點類公有繼承Shape類
{
public:
Point(float x=0,float y = 0);
void SetPoint(float a,float b);
float getx()const {return x;}
float gety()const {return y;}
virtual void shapName()const {cout<<"Point: ";}
friend ostream& operator <<(ostream& output,const Point &p);//Point類的友元函式
protected:
float x,y;
};
Point::Point(float a,float b):x(a),y(b){}
void Point::SetPoint(float a, float b)
{
x = a;
y = b;
}
ostream& operator <<(ostream& output,const Point &p)
{
output<<"[ "<<p.x<<","<<p.y<<" ]";
return output;
}
class Circle:public Point //公有繼承Point類
{
public:
Circle(float x = 0,float y = 0,float r = 0);
void setRadius(float r);
float getRadius()const {return radius;}
virtual float area()const;
virtual void shapName()const {cout<<"Circle: ";}
friend ostream& operator <<(ostream& output,const Circle& c);//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::area()const
{
return 3.14159*radius*radius;
}
ostream& operator <<(ostream& output,const Circle& c)
{
//output<<"[ "<<c.x<<","<<c.y<<" ],r = "<<c.radius;//這兩種寫法那種正確?派生類的友元函式能不能訪問基類的私有資料成員
output<<"[ "<<c.getx()<<","<<c.gety()<<" ],r = "<<c.radius;
return output;
}
uj5u.com熱心網友回復:
不能,因為公有繼承的派生類不能訪問基類的私有資料轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/101608.html
標籤:基礎類
