继承也叫作泛化(Generalization),用于描述父子类之间的关系,父类又称为基类或者超类,子类又称作派生类。在UML中,继承关系用带空心三角形的实线来表示。
关于继承关系一共有两种:普通继承关系和抽象继承关系,但是不论哪一种表示继承关系的线的样式是不变的。
假如现在我定义了一个父类(Bird)和两个子类(Cuckoo、Eagle):
class Bird
{
public:
string getName()
{
return m_name;
}
void setName(string name)
{
m_name = name;
}
virtual void fly() {}
virtual void eat() {}
protected:
string m_sex;
string m_name;
};
class Cuckoo : public Bird
{
public:
void fly() override
{
cout << "我拍打翅膀飞行..." << endl;
}
void eat() override
{
cout << "我喜欢吃肉肉的小虫子..." << endl;
}
};
class Eagle : public Bird
{
public:
void fly() override
{
cout << "我展翅翱翔..." << endl;
}
void eat() override
{
cout << "我喜欢吃小动物..." << endl;
}
};
所以使用UML类图表示如下:
父类Bird中的fly()和eat()是虚函数,它有两个子类Cuckoo和Eagle,在这两个子类中重写了父类的虚函数,在使用带空心三角的实现表示继承关系的时候,有空心三角的一端指向父类,另一端连接子类。