文章目录
- 1. UML六种箭头的含义
- 2. UML六种分类的实例
- 3. 使用腾讯文档里面的流程图里面选UML就行了
1. UML六种箭头的含义
2. UML六种分类的实例
下面的例子中, Person
是抽象类, father
和mather
继承person
类, son
是派生类, 继承father
类
另一个单独的类home
, 里面包含father
,mather
,son
三个对象, car
和land
两个对象, 其中father
对象是在home
创建对象的时候构造函数中创建的, mather是传入进home
的, son
是home
的一个方法传入的, 最后通过printMembership
方法打印三个人的名称
具体的UML图如下
#include <iostream>
using namespace std;
class Person{
public:
virtual ~Person(){}
virtual void run() = 0; // 带纯虚函数, 指名该类为抽象类, 定义的是接口
virtual string getName() = 0;
};
// 1.实现 : 子类继承带有纯虚函数的类
class Father : public Person{
public:
Father(): Father("小明"){}
Father(string name) : m_name(name){}
virtual ~Father(){} // 基类析构函数设置为虚函数, 多态时才能回收子类对象
virtual void run(){ // 带虚函数的基类, 子类在实现
cout<< m_name << "爸爸能跑起来了" <<endl;
}
virtual string getName(){
return m_name;
}
private:
string m_name; // 成员变量建议使用m_开头, 表示membership
};
// 2.泛化 子类继承虚函数的父类
class Son : public Person{
public:
Son(): Son("小明"){}
Son(string name) : m_name(name){}
virtual void run(){ // 带虚函数的基类, 子类在实现
cout<< m_name << "儿子能跑起来了" <<endl;
}
string getName(){
return m_name;
}
private:
string m_name; // 成员变量建议使用m_开头, 表示membership
};
class Mather : public Person{
public:
Mather():Mather("小皇") {}
Mather(string name) : m_name(name){}
virtual void run(){
cout << m_name << "妈妈跑起来了" << endl;
}
virtual string getName(){
return m_name;
}
private:
string m_name;
};
class Car{
public:
Car(string n){cout << "一辆车 " << n << endl;}
};
class Land{
public:
Land(string n){cout << "一块地 " << n << endl;}
};
class Home{
private:
// 4.关联
Person *father = nullptr;
Person *son = nullptr;
// 3. 依赖
Person *mather = nullptr;
// 5. 组合关系一个home怎么能没有车和土地呢...
Car *car = new Car("大白");
Land *land = new Land("黄土地");
public:
Home(string fathername, Person *mather) : mather(mather){ // 3. 依赖实现
father = new Father(fathername); // 4. 关联实现
cout << "建造一个家完成了...\n" << endl;
}
~Home(){
if(father != nullptr)
delete father; // 因为爸爸是在类里面定义的, 因此回收的时候需要在当前类的析构函数中回收
if(son != nullptr)
delete son;
}
// 打印家庭成员
void printMembership(){
cout << "这家夫妻俩: " << mather->getName() << " "<< father->getName() << endl;
if(son != nullptr){
cout << "还有个乖娃娃 " << son->getName() <<endl;
}
}
void BuildHouse(){
cout << "拉进来一个人盖房子" << endl;
}
void getSon(Person *son){ // 6.聚合, 传入参数
this->son = son;
}
};
int main(int argc, char const *argv[])
{
Mather *mather = new Mather("赵丽颖");
Home *h = new Home("王羲之",mather);
// h->printMembership();
Person *son = new Son("王八蛋");
h->getSon(son);
h->printMembership();
return 0;
}
3. 使用腾讯文档里面的流程图里面选UML就行了