RHZ'S BLOG | 个人分享

  • 首页
  • 笔记
  • 小日常
  • 音乐
  • 读书
  • 软件分享
YOLO
  1. 首页
  2. 笔记
  3. C/C++
  4. 正文

抽象函数|C++

2022年9月17日 181点热度 0人点赞 2条评论

前几节的例子演示了派生类与基类指针的使用方法。接下来我们接着之前游戏的例子,我们的每一个角色都有一个attack()函数。

为了能够让Role指针为每一个派生类提供调用attack()函数,我们需要在基类将函数声明成抽象函数。

在基类中声明一个抽象函数,在派生类中使用相应的函数,多态允许使用Role指针来调用派生类的函数。

每个派生类将覆盖attack()函数并有一个单独的实现:

class Role{
 public:
  virtual void attack() {
  }
};

class Warrior: public Role {
 public:
  void attack() {
   cout << "剑刃风暴!"<<endl;
  }
};

class Magician: public Role {
 public:
  void attack() {
   cout << "冰暴!"<<endl;
 }
};

 通过关键字virtual可以将基类的函数声明成抽象函数。

现在,我们可以使用Role指针来调用attack()函数。

int main() {
  Warrior w;
  Magician m;
  Role *r1 = &w;
  Role *r2 = &m;

  r1->attack();
  r2->attack();
}

/* 输出:
剑刃风暴!
冰暴!
*/

由于attack()函数被声明为抽象的,它就像一个模板,告诉派生类自己有一个attack()函数。

我们通过游戏的例子来演示多态的概念,我们使用Role指针调用相同的attack()函数,并生成不同的结果。

r1->attack();
r2->attack();

如果基类中的函数是抽象的,则派生类中的函数实现将根据所引用对象的实际类型进行调用,而不管原先声明的是那种类型。

 声明或者继承了一个抽象函数的类被称为一个多态类。

抽象函数|C++插图
本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可
标签: 暂无
最后更新:2022年9月17日

RHZ

即使单枪匹马,我亦勇敢无畏

点赞
< 上一篇
下一篇 >

文章评论

  • 头像
    כנסו לאתר

    Everything is very open with a really clear clarification of the challenges. It was really informative. Your website is extremely helpful. Thank you for sharing!

    2022年9月20日
    回复
  • 头像
    https://romantik69.co.il/

    אני מאוד ממליץ על אתר הזה כנסו עכשיו ותהנו ממגוון רחב של בחורות ברמה מאוד גבוהה. רק באתר ישראל נייט לאדי <a href="https://romantik69.co.il/">נערות ליווי</a>

    2022年10月3日
    回复
  • 取消回复
    归档
    • 2023年2月
    • 2022年12月
    • 2022年11月
    • 2022年10月
    • 2022年9月
    • 2022年8月
    • 2022年7月
    • 2022年6月
    • 2022年5月
    • 2022年4月
    • 2022年3月
    • 2022年2月
    • 2021年12月
    • 2021年11月
    • 2021年10月
    • 2021年8月
    • 2021年7月

    COPYRIGHT © 2022 RHZ的博客. ALL RIGHTS RESERVED.

    Theme Kratos Made By Seaton Jiang

    渝ICP备2022008933号-1