C++ 抽象类

在 C++中,我们互换使用术语抽象类和接口。具有纯虚函数的类称为抽象类。例如,以下函数是纯虚函数:

virtual void fun() = 0;

纯虚函数用虚拟关键字标记,签名后有= 0。您可以将此函数称为抽象函数,因为它没有正文。派生类必须为父类的所有纯虚函数提供实现,否则默认情况下它将成为抽象类。

为什么我们需要一个抽象类?

让我们借助现实生活中的例子来理解这一点。让我们说我们有一个类Animal,它会睡眠,发出声音等等。现在我只考虑这两个行为并创建一个具有两个函数sound()sleeping()的类Animal

现在,我们知道动物的声音是不同的,猫说“喵”,狗说“汪”。那么我在Animal类中为函数sound()提供了什么实现?这样做的唯一和正确的方法是使这个函数纯粹抽象,这样我就不需要在Animal类中给出实现但是所有继承Animal的类必须为此函数提供实现。这样我确保所有动物都有声音,但它们有独特的声音。

可以在 C++ 程序中编写相同的示例,如下所示:

抽象类示例

#include<iostream>
using namespace std;
class Animal{
public:
   //Pure Virtual Function
   virtual void sound() = 0;

   //Normal member Function
   void sleeping() {
      cout<<"Sleeping";
   }
};
class Dog: public Animal{
public:
   void sound() {
      cout<<"Woof"<<endl;
   }
};
int main(){
   Dog obj;
   obj.sound();
   obj.sleeping();
   return 0;
}

抽象类规则

1)我们已经看到任何具有纯虚函数的类都是抽象类。

2)我们无法创建抽象类的实例。例如:如果我在上面的程序中写了这行Animal obj;,就会导致编译错误。

3)我们可以创建指向子类的实例的抽象基类的指针和引用。例如,这是有效的:

Animal *obj = new Dog();
obj->sound();

4)抽象类可以有构造函数

5)如果派生类没有实现父类的纯虚函数,则派生类变为抽象类。

赞(0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址