21xrx.com
2025-03-27 01:04:11 Thursday
文章检索 我的文章 写文章
C++ 虚函数(virtual void)
2023-06-28 07:23:01 深夜i     19     0
C++ 虚函数 virtual void 多态 继承

C++中的虚函数是一种重要的编程技巧,用于实现多态性。虚函数使得在类的继承层次结构中能够对同名函数进行不同的实现,从而使得程序在运行时能够根据实际的对象类型来调用不同的函数实现。

虚函数是通过在函数的定义中使用“virtual”关键字来声明的。这个关键字告诉编译器,在类的继承树中,如果子类中定义了与父类中同名同参数的虚函数,则应该使用子类中的函数实现,而不是父类中的函数。

虚函数的实现是通过在虚函数表中的一个指针来实现的。这个指针指向实际的函数实现。当一个对象被创建时,虚函数表就被创建,并且每个对象都有一份虚函数表的副本。每个对象的虚函数表中的指针都指向该对象所属的类的虚函数实现。

使用虚函数的另一个好处是类的继承树可以动态的改变。如果在派生类中重新定义一个虚函数的实现,那么所有基类指针都可以调用这个新的函数实现,而不需要修改任何代码。

例如,在一个简单的类继承结构中,如果我们定义一个基类Animal,它有一个虚函数makeSound。派生类Cat和Dog分别重新实现了这个函数:

class Animal {
public:
  virtual void makeSound() {
    std::cout << "Animal makes a sound.\n";
  }
};
class Cat : public Animal {
public:
  void makeSound() {
    std::cout << "Cat meows.\n";
  }
};
class Dog : public Animal {
public:
  void makeSound() {
    std::cout << "Dog barks.\n";
  }
};

使用这些类定义对象:

Animal* animal = new Animal();
Animal* cat = new Cat();
Animal* dog = new Dog();

当我们调用makeSound()函数时,程序将根据实际类型来调用相应的函数实现:

animal->makeSound(); // Output: "Animal makes a sound."
cat->makeSound();  // Output: "Cat meows."
dog->makeSound();  // Output: "Dog barks."

总之,虚函数是C++中一个非常有用的特性,因为它使得多态性对于复杂的继承树结构更加容易实现。使用虚函数可以使得程序更加灵活性,可以动态地改变继承树。

  
  

评论区