C++ 入门笔记 OOP与类2

类的继承

假设现在需要实现多种曲线的类,如直线,圆,等等。有一个方式是先定义一个空泛的“曲线”类,再根据需要具体定义的实际曲线。这些实际的曲线可继承“曲线”类,从而节省很多功夫。
“曲线”类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
详细讲解图中类与类之间的关系:
vectorcurve之间是关联关系。这表示……他们之间有关系。实际实现通过在curve中定义一个带有vector类型的成员。如此处的tangent()函数。
pointcurve之间是组合关系,这表示pointcurve的一部分。
line, circlecurve之间是继承关系。所以我们可以说line是一个curve

你可能感兴趣的:(C++ 入门笔记 OOP与类2)