类的继承
假设现在需要实现多种曲线的类,如直线,圆,等等。有一个方式是先定义一个空泛的“曲线”类,再根据需要具体定义的实际曲线。这些实际的曲线可继承“曲线”类,从而节省很多功夫。
“曲线”类curve
的定义如下。
#include "vector.h"
#include "point.h"
class curve{
public:
//{ } means no implementation required
curve() { };
~curve() { };
double length() const;
virtual vector tangent(point const & p) const = 0; // Pure virtual
point p0() const;
point p1() const;
protected:
point endpoint0_;
point endpoint1_;
}
类成员属性
类成员属性分为private
, protected
, public
三种。此处定义一个直线类line
,其继承自curve
.
#include "curve.h"
class line : public curve{
public:
line();
line(point const& point0, point const& point1);
virtual vector tangent(point const& p) const;
vector tangent() const;
};
注意此处的public
。此时,line
可以访问和修改curve
中的所有public
成员,可以访问curve
中的所有protected
成员,而无法访问curve
中的private
成员。对于class
而言,此关键字默认为private
。
下图展示了他们之间的关系。
UML图
UML图代表了类之间的关系。
在上图中,
+
表示public
,#
代表protected
,-
代表private
。详细讲解图中类与类之间的关系:
vector
和curve
之间是关联关系。这表示……他们之间有关系。实际实现通过在curve
中定义一个带有vector
类型的成员。如此处的tangent()
函数。point
和curve
之间是组合关系,这表示point
是curve
的一部分。line
, circle
和curve
之间是继承关系。所以我们可以说line
是一个curve
。
网友评论