面向对象编程的特点之一是通过继承来鼓励代码的复用。从现有类派生新类,现有类称为基类,而新类称为派生类。派生类使用基类的成员,但也可以修改和补充它们。
继承的层次结构
当我们谈论继承时,我们实际上是在描述一个层次结构。例如,元素周期表中有气体,所有周期元素都具有气体的特性。而惰性气体是其中的一个重要子类。这样的层次结构使我们更容易解释惰性气体的行为。
几何形状的继承示例
考虑一个几何形状的继承示例。为了描述各种简单形状(如圆形、三角形、矩形、正方形等),最好的方法是创建一个基类,这个基类是所有派生类的祖先。
例如,我们可以创建一个基类CForm
:
class CForm {
protected:
int m_kind;
int m_x;
int m_y;
public:
CForm() {m_kind=0; m_x=0; m_y=0;}
void SetX(int x) {m_x=x;}
void SetY(int y) {m_y=y;}
};
然后,我们可以从基类派生出新的类,如CRound
和CQuadrangle
:
class CRound : public CForm {
private:
int m_radius;
public:
CRound() {m_kind=1;}
};
class CQuadrangle : public CForm {
private:
int m_side;
public:
CQuadrangle() {m_kind=2;}
};
继承的类型
- 公开继承(public):派生类是基类的一个类型。这意味着,例如,正方形(
CQuadrangle
)是一种形状(CForm
),但形状不一定是正方形。 - 保护继承(protected):基类的公开和保护成员成为派生类的保护成员。这种继承关系不常见,使用时需要小心。
- 私有继承(private):基类的公开和保护成员在派生类中变为私有成员。
在MQL4中,继承的语法如下:
class className :
(public | protected | private) opt baseClassName
{
class members declaration
};
总结
通过声明基类中的最通用成员,我们可以在派生类中添加特定类的附加成员。这允许我们创建可以多次重用的强大的代码库。但是值得注意的是,MQL4不支持多重继承。