21xrx.com
2024-12-27 05:41:36 Friday
登录
文章检索 我的文章 写文章
"能否在C++中使用父类调用纯虚函数?"
2023-06-22 16:31:26 深夜i     --     --
C++ 父类 纯虚函数 调用 继承

在C++中,一个纯虚函数是一个没有具体实现的函数,它在基类中声明并在派生类中实现。它被称为“纯虚函数”,因为它没有实现,只是一个接口。通常情况下,纯虚函数必须在派生类中重新定义才能被调用。

然而,有时候我们也希望在基类中调用纯虚函数。那么,能否在C++中使用父类调用纯虚函数呢?

答案是肯定的,我们可以使用父类指针或引用来调用子类中的纯虚函数,即使子类没有定义该函数,也不会出错,因为这是OOP编程中的多态性。子类继承了该函数的接口,而接口是将来实现的承诺,因此在父类中声明该函数是合法的,并且允许通过父类指针或引用来调用。

例如,假设我们有一个基类Animal和两个派生类Dog和Cat。我们定义了一个纯虚函数makeSound()来表示动物的叫声。在基类Animal中声明纯虚函数makeSound(),然后在Dog和Cat中实现该函数。现在我们可以使用父类指针或引用来调用makeSound(),无论指向的是Dog还是Cat的实例,都会调用正确的函数。

这里我们给出一个简单的示例代码:


#include <iostream>

class Animal {

public:

  virtual void makeSound() = 0;

};

class Dog : public Animal {

public:

  void makeSound()

    std::cout << "Woof!" << std::endl;

  

};

class Cat : public Animal {

public:

  void makeSound()

    std::cout << "Meow!" << std::endl;

  

};

int main() {

  Dog myDog;

  Cat myCat;

  Animal* ptrAnimal1 = &myDog;

  Animal* ptrAnimal2 = &myCat;

  ptrAnimal1->makeSound();  // Output: Woof!

  ptrAnimal2->makeSound();  // Output: Meow!

  return 0;

}

在上面的代码中,我们通过指向Dog和Cat的Animal指针调用makeSound()函数。由于makeSound()是一个虚函数,因此会自动调用正确的实现。

总之,我们只需在基类中声明纯虚函数即可,即使该函数在子类中没有实现。这是C++中强大的多态性和抽象类的一个应用。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复