21xrx.com
2024-09-19 09:50:14 Thursday
登录
文章检索 我的文章 写文章
C++中,父类指针指向子类时,执行哪个虚函数?
2023-07-05 15:54:22 深夜i     --     --
C++ 父类指针 子类 虚函数 执行

在C++中,虚函数是一种非常有用的特性,它允许子类重写父类的函数。使用虚函数,我们可以在运行时确定到底被调用的是哪个函数,而不是在编译时就确定。

当父类指针指向一个子类对象时,我们可以通过这个指针调用子类的成员函数。但是,由于父类指针并不知道它指向的对象实际上是一个子类对象,因此需要通过虚函数来确定调用哪个函数。

在这种情况下,C++会执行子类中与父类相同名称和签名的虚函数。如果子类没有重写该函数,则父类的虚函数将被执行。如果子类有实现该函数,则子类的虚函数将被执行。当子类重写父类的虚函数时,建议使用override关键字,这样可以更好地防止错误。

举个例子,假设我们有一个名为Animal的父类,以及两个子类Dog和Cat:


class Animal {

public:

  virtual void makeSound()

   std::cout << "Animal makes a sound" << std::endl;

 

};

class Dog : public Animal {

public:

  void makeSound() override

   std::cout << "Dog barks" << std::endl;

 

};

class Cat : public Animal {

public:

  void makeSound() override

   std::cout << "Cat meows" << std::endl;

 

};

现在,我们可以创建一个Animal类型的指针,并将它指向一个Dog对象:


Animal* animal = new Dog;

当我们使用这个指针调用makeSound函数时,编译器将会执行Dog的makeSound函数,而不是Animal的makeSound函数。


animal->makeSound(); // 输出 "Dog barks"

总的来说,通过虚函数,我们可以轻松地实现多态性和继承,使我们的程序更加灵活和可扩展。但是,在设计和开发中,我们需要合理地使用虚函数,以避免潜在的问题。

  
  

评论区

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