huweide

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
  15 随笔 :: 0 文章 :: 0 评论 :: 1482 阅读
复制代码
 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 }
复制代码

 

posted on   奇怪的菜鸟  阅读(15)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示