RHZ'S BLOG | 个人分享

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

抽象类|C++

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

抽象函数

抽象函数也可以在基类中实现。

class Role {
 public:
  virtual void attack() {
   cout << "角色!"<<endl;
  }
};

class Warrior: public Role {
 public:
  void attack() {
   cout << "战士!"<<endl;
  }
};

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

现在,当你创建一个Role指针,并调用attack()函数时,编译器会调用该指针指向的对应于该对象类型的函数:

int main() {
 Warrior w;
 Magician m;
 Role r;

 Role *r1 = &w;
 Role *r2 = &m;
 Role *r3 = &r;

 r1->attack();
 // 输出 "战士!"

 r2->attack();
 // 输出 "法师!"

 r3->attack();
 // 输出 "角色!"
}
抽象类|C++插图

纯虚函数

在某些情况下,你希望在一个基类中包含一个抽象函数,以便它可以在派生类中被重新定义以适应该类的对象,但是没有有意义的定义给基类中的函数类。

没有定义的抽象成员函数被称为纯虚函数。他们指定派生类自己定义该函数。

语法是用= 0(一个等号和一个零)替换它们的定义:

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

一个纯虚函数基本上定义了派生类将自己去定义的那个函数。

从具有纯虚拟函数的类继承的每个派生类必须重写该函数。

 如果纯虚函数没有在派生类中重写,那么当您尝试实例化派生类的对象时,代码将无法编译并导致错误。

抽象类|C++插图1

Role类中的纯虚函数必须在其派生类中重写。

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

class Warrior: public Role {
 public:
  void attack() {
   cout << "战士!"<<endl;
  }
};

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

在Person类中声明一个纯虚函数sayHello(),并在派生类Boy类中重写它

#include <iostream>
using namespace std;
class Person{
public:
    virtual void sayHello() =0;
};
class Boy:public Person{
public:
    void sayHello(){
        cout << "Hello,My Dear." <<endl;
    }
};

我们不能对一个有纯虚函数的基类创建对象。

下列例子将会报错。

Role r; // Role拥有一个纯虚函数,这样创建对象将会报错

这些类被称为抽象类。他们只能被当作基类使用,因此被允许具有纯虚函数。

我们可能会认为抽象基类是无用的,但事实并非如此。 它可以用来创建指针并利用其的多态性质。

例如:

Warrior w;
Magician m;
Role *r1 = &w;
Role *r2 = &m;

r1->attack();
r2->attack();
抽象类|C++插图2
本作品采用 知识共享署名-非商业性使用-相同方式共享 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