21xrx.com
2024-12-27 17:36:02 Friday
登录
文章检索 我的文章 写文章
如何在C++中通过父类指针操作子类的新函数
2023-07-10 20:33:01 深夜i     --     --
C++ 继承 多态 父类指针 子类新函数

在C++中,父类和子类之间的继承关系可以使得子类继承父类的函数和属性。但是,当我们为子类新增加一个函数的时候,如何在使用父类指针操作子类实例时调用这个新函数呢?

为了解决这个问题,我们可以使用虚函数(virtual function)和指针运算符(->)来访问子类的新函数。

首先,让我们考虑一个简单的例子。我们有一个Animal类和一个Cat类,Cat类继承自Animal类,并添加了一个新函数meow()。我们可以通过以下代码来访问Cat类的meow()函数:


#include <iostream>

class Animal {

public:

  virtual void makeSound()

    std::cout << "Animal is making a sound." << std::endl;

  

};

class Cat : public Animal {

public:

  void makeSound()

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

  

  void meow()

    std::cout << "Cat is meowing." << std::endl;

  

};

int main() {

  Animal* animal = new Cat();

  animal->makeSound(); // output: Meow!

  

  // 使用指针运算符来调用新函数

  Cat* cat = dynamic_cast<Cat*>(animal);

  if (cat != NULL) {

    cat->meow(); // output: Cat is meowing.

  }

  

  delete animal;

  return 0;

}

在上面的例子中,我们首先创建了一个指向Cat类实例的Animal指针。由于makeSound()被声明为虚函数,因此它可以动态调用Cat类的makeSound()函数,输出结果为“Meow!”。接下来,我们使用dynamic_cast运算符将Animal指针转换为Cat指针,并将其赋值给cat变量。如果转换成功,即Animal实例确实是一个Cat实例,那么我们就可以通过cat指针来调用Cat类的新函数meow()。最后,我们删除Animal实例以释放内存。

当我们使用父类指针操作子类实例时,通过虚函数和指针运算符的使用,我们可以轻松地访问和操作子类的新函数。这让我们的代码更加灵活和可扩展,同时也提高了代码的可重用性。

  
  

评论区

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