21xrx.com
2024-11-25 03:15:55 Monday
登录
文章检索 我的文章 写文章
C++中虚函数的使用详解
2023-06-24 13:28:14 深夜i     --     --
C++ 虚函数 使用 详解 继承

C++中的虚函数是一种非常重要的特性,它允许在继承层次结构中进行多态性的实现。在本文中,我们将详细介绍C++中虚函数的使用方法。

首先,需要明确一点,虚函数是一种在基类中声明、在派生类中定义并实现的函数。虚函数可以被重写,其被调用的版本取决于对象的实际类型。尤其是,当一个指向基类的指针指向一个派生类对象时,该指针调用虚函数时将导致派生类版本的函数被调用。

下面是一个简单的示例代码,展示了如何在C++中声明虚函数:


#include <iostream>

class Animal {

public:

  // 声明虚函数

  virtual void make_sound()

    std::cout << "I am an animal." << std::endl;

  

};

class Dog : public Animal {

public:

  // 定义并实现虚函数

  void make_sound() override

    std::cout << "I am a dog. Woof woof!" << std::endl;

  

};

int main() {

  Animal *animal = new Animal();

  animal->make_sound();

  delete animal;

  animal = new Dog();

  animal->make_sound();

  delete animal;

  return 0;

}

在这个示例中,我们声明了一个基类Animal,它有一个名为make_sound的虚函数。然后我们定义一个派生类Dog,并在该类中重写了make_sound函数。在主函数中,我们创建一个Animal实例和一个Dog实例,并通过指针调用它们的make_sound函数。正如我们所期望的那样,使用指向Animal实例的指针调用make_sound函数时,输出的是"I am an animal.",而使用指向Dog实例的指针调用make_sound函数时,输出的是"I am a dog. Woof woof!"。

需要注意的是,在重写虚函数时,使用override关键字是一个很好的习惯。override关键字可以确保你所写的函数确实是重写了虚函数,而不是新定义了一个函数。

此外,虚函数是可以被纯虚函数替代的。纯虚函数是一种在基类中声明并没有具体实现的虚函数。在基类中声明纯虚函数的主要目的是,强制所有从该类中派生的类都实现该函数。例如:


class Shape {

public:

  // 将虚函数声明为纯虚函数

  virtual double get_area() = 0;

};

class Rectangle : public Shape {

public:

  double get_area() override {

    return length * width;

  }

private:

  double length;

  double width;

};

在这个示例中,我们声明了一个基类Shape,里面有一个纯虚函数get_area,它没有实现。然后我们定义一个派生类Rectangle,这个类实现了get_area函数。注意,在Rectangle类中,我们需要覆盖基类中的get_area函数,否则编译器会报错。

综上所述,虚函数和纯虚函数是C++中多态性的重要体现。通过使用这些特性,我们可以更方便地实现复杂的继承层次结构,并使代码更具可维护性和可扩展性。

  
  

评论区

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