C++ 入门笔记 OOP与类2
2018-11-14 本文已影响4人
被子十三
类的继承
假设现在需要实现多种曲线的类,如直线,圆,等等。有一个方式是先定义一个空泛的“曲线”类,再根据需要具体定义的实际曲线。这些实际的曲线可继承“曲线”类,从而节省很多功夫。
“曲线”类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图代表了类之间的关系。
curve系的UML图
在上图中,
+表示public,#代表protected,-代表private。详细讲解图中类与类之间的关系:
vector和curve之间是关联关系。这表示……他们之间有关系。实际实现通过在curve中定义一个带有vector类型的成员。如此处的tangent()函数。point和curve之间是组合关系,这表示point是curve的一部分。line, circle和curve之间是继承关系。所以我们可以说line是一个curve。