1 /*
2 多态:父类虚函数、子类重写虚函数
3 类之间的关系强弱顺序:继承(泛化)> 组合 > 聚合 > 关联 > 依赖
4 关联的两个对象之间一般是平等的,聚合则一般不平等
5 关联关系:表示两个对象之间的一种简单的联系,如朋友之间,关系平等
6 聚合关系:独立存在,如人和书之间
7 组合关系:不能独立存在,如人和心脏之间
8 */
9 #include "iostream"
10 class Hero
11 {
12 public:
13 Hero(std::string Name) : m_Name(Name)
14 {
15 }
16 virtual void Release_skills() { std::cout << "释放技能" << std::endl; }
17 virtual void speak() { std::cout << "说话" << std::endl; }
18
19 virtual std::string getName() = 0; //纯虚函数、子类必须重写,否则无法实例化
20
21 virtual void setCSName(std::string CSNamse) //虚函数、可以不在子类中进行重写
22 {
23 m_CSName = CSNamse;
24 }
25 virtual std::string getCSName()
26 {
27 std::cout << "我的超兽是:" << m_CSName.c_str() << std::endl;
28 return m_CSName;
29 }
30 protected:
31 std::string m_Name = "";
32 std::string m_CSName = "";
33 };
34
35 class HLF : public Hero
36 {
37 public:
38 HLF(std::string Name) : Hero(Name) //委托构造函数
39 {
40 }
41 std::string getName()
42 {
43 std::cout << "我的名字是:" << m_Name.c_str() << std::endl;
44 return m_Name;
45 }
46 virtual void Release_skills()override //override表示重写虚函数以及检验虚函数名称是否正确
47 {
48 std::cout << "释放技能:火灵诀" << std::endl;
49 }
50 virtual void speak()override
51 {
52 std::cout << "敌人在我面前不是逃之夭夭,就是一败涂地 " << std::endl;
53 }
54
55 };
56
57 class LJ :public Hero
58 {
59 public:
60 LJ(std::string Name) : Hero(Name)
61 {
62 }
63 virtual void Release_skills()
64 {
65 std::cout << "释放技能:寒影诀" << std::endl;
66 }
67 virtual void speak()
68 {
69 std::cout << "攻敌三分,自留七分 " << std::endl;
70 }
71 std::string getName()
72 {
73 std::cout << "我的名字是:" << m_Name.c_str() << std::endl;
74 return m_Name;
75 }
76 };
77
78 int main()
79 {
80 //创建基类指针,让它指向派生类对象,用基类指针调用派生类的成员函数
81 std::unique_ptr<Hero> ptr1 = std::unique_ptr<Hero>(new HLF("火麟飞"));
82 ptr1->getName();
83 ptr1->speak();
84 ptr1->Release_skills();
85 ptr1->setCSName("幻麟兽");
86 ptr1->getCSName();
87
88 std::cout << std::endl;
89
90 std::unique_ptr<Hero> ptr2 = std::unique_ptr<Hero>(new LJ("龙戬"));
91 ptr2->getName();
92 ptr2->speak();
93 ptr2->Release_skills();
94 ptr2->setCSName("龙战兽");
95 ptr2->getCSName();
96 return 0;
97 }
![]()