21xrx.com
2024-12-26 16:17:08 Thursday
登录
文章检索 我的文章 写文章
如何使用 C++ 的虚函数
2023-07-10 04:43:12 深夜i     --     --
C++ 虚函数 使用 继承 基类

虚函数是 C++ 中非常重要的概念。它是允许在派生类中重新定义基类函数的机制,并且是实现多态性的基础。本文将介绍如何使用 C++ 的虚函数及其相关概念。

1. 定义虚函数

在 C++ 中,将函数定义为虚函数非常简单。只需在函数声明前加上 virtual 关键字即可,如下所示:


class Animal {

public:

  virtual void speak()

    cout << "This is an animal." << endl;

  

};

上例中,speak 函数被定义为虚函数。该函数在 animal 类中被定义,并且可被派生类覆盖重写。

2. 覆盖虚函数

假设我们有一个 Cat 类型的派生类,要覆盖 animal 类中的 speak 函数,重写后 Cat 类定义如下:


class Cat : public Animal {

public:

  void speak()

    cout << "This is a cat." << endl;

  

};

注意,在 Cat 类中重新定义 speak 函数时,函数签名必须与 animal 类中的 speak 函数相同。即函数的名称、返回类型和参数类型必须完全匹配。

3. 调用虚函数

在基类中,为了调用派生类中的虚函数,我们需要使用指针或引用。假设我们有一个 animals 数组,其中包含不同类型的 animal,我们可以使用如下方法调用派生类的虚函数:


Animal* animals[2];

animals[0] = new Animal;

animals[1] = new Cat;

for (int i = 0; i < 2; i++) {

  animals[i]->speak();

}

在上例中,我们使用一个指向 animal 对象的指针数组 animals,并将其第一个元素设置为 animal 类型,第二个元素设置为 cat 类型。在 for 循环中,我们使用 animals[i]->speak() 表示调用虚函数 speak,程序将根据实际对象类型选择正确的函数进行调用。

4. 纯虚函数

在某些情况下,我们希望将基类函数定义为纯虚函数,以确保在派生类中对该函数进行重写。在 C++ 中,我们可以使用如下语法将函数定义为纯虚函数:


class Animal {

public:

  virtual void speak() = 0;

};

在上例中,我们将 speak 函数定义为纯虚函数,通过使用 = 0 来标识。注意,纯虚函数必须在声明时赋值为 0。

学习 C++ 的虚函数是 C++ 开发人员必须掌握的基础知识。通过实践上述方法,我们能够在程序中利用虚函数实现多态性,提高软件的可扩展性和灵活性。

  
  

评论区

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