21xrx.com
2025-03-21 00:03:43 Friday
文章检索 我的文章 写文章
如何使用C++父类指针调用子类函数?
2023-06-22 07:36:56 深夜i     --     --
C++ 父类指针 子类函数 继承 多态

C++中的继承是面向对象编程中非常重要的一个概念,有时候我们需要通过父类的指针来调用子类中的函数。该如何实现呢?

首先需要了解的是,C++中的多态性是通过虚函数来实现的。虚函数是一种特殊的类成员函数,它允许在子类中重写父类中的函数,并且能够在运行时动态地确定要调用的具体函数。因此,我们需要将父类中想要被重写的函数声明为虚函数。

接下来,我们可以通过使用父类的指针来调用子类中的虚函数。当我们将一个子类对象地址赋给父类指针时,由于子类对象包含所有父类的成员,因此可以使用该指针来访问父类中的成员变量和函数。同时,由于子类中重写了父类的虚函数,当我们调用该函数时,就会自动调用子类中的对应函数。

下面是一个简单的例子,演示如何使用父类指针调用子类函数:

#include <iostream>
using namespace std;
class Animal{
public:
  virtual void sound()
    cout << "This is the sound of an animal." << endl;
  
};
class Cat : public Animal{
public:
  void sound()
    cout << "Meow!" << endl;
  
};
class Dog : public Animal{
public:
  void sound()
    cout << "Woof woof!" << endl;
  
};
int main(){
  Animal* a;
  Cat c;
  Dog d;
  a = &c;
  a->sound(); // This will call the sound function of the Cat class.
  a = &d;
  a->sound(); // This will call the sound function of the Dog class.
  return 0;
}

在上面的例子中,Animal是父类,而Cat和Dog是它的子类。Animal类中的sound函数被声明为虚函数,而Cat和Dog中都重写了它。

在main函数中,我们创建了一个Animal指针a,并将它分别指向了一个Cat和一个Dog对象。通过调用a->sound(),我们成功地调用了子类中实现的sound函数。

总结一下,通过将父类函数声明为虚函数,并使用父类指针来调用子类中的函数,我们可以实现动态绑定(动态确定要调用的具体函数),实现多态性和灵活性。

  
  

评论区