Rumah >pembangunan bahagian belakang >C++ >Penjelasan terperinci tentang warisan fungsi C++: Bagaimana untuk menggunakan fungsi maya untuk mencapai penggunaan semula kod?

Penjelasan terperinci tentang warisan fungsi C++: Bagaimana untuk menggunakan fungsi maya untuk mencapai penggunaan semula kod?

王林
王林asal
2024-05-04 10:54:011022semak imbas

Warisan fungsi membolehkan kelas terbitan mewarisi dan menggunakan semula fungsi kelas asas. Dengan menggunakan fungsi maya, penggunaan semula kod boleh dicapai, di mana kelas terbitan boleh mengatasi fungsi dengan nama yang sama kelas asas dan secara dinamik melaksanakan versi fungsi yang berbeza berdasarkan jenis objek panggilan.

C++ 函数继承详解:如何使用虚函数实现代码复用?

Penjelasan terperinci pewarisan fungsi C++: cara menggunakan fungsi maya untuk mencapai penggunaan semula kod

Pengenalan

Pewarisan fungsi ialah teknologi penting dalam pengaturcaraan berorientasikan objek (OritvedOP) yang membenarkan pengaturcaraan berorientasikan objek dan guna semula fungsi kelas asas. Dengan menggunakan fungsi maya, penggunaan semula kod yang lebih fleksibel dan berskala boleh dicapai.

Apakah fungsi maya?

Fungsi maya ialah fungsi ahli khas yang membenarkan kelas terbitan mengatasi fungsi nama yang sama bagi kelas asas. Apabila fungsi maya dipanggil, versi fungsi sebenar yang dilaksanakan ditentukan secara dinamik berdasarkan jenis objek panggilan.

Syntax

Fungsi maya diisytiharkan menggunakan kata kunci maya, contohnya: virtual 进行声明,例如:

class Base {
public:
  virtual void print() const; // 虚函数
};

代码复用

通过使用虚函数,我们可以实现代码复用。例如,假设我们有一个基类 Shape,它包含一个 draw() 函数:

class Shape {
public:
  virtual void draw() const;
};

我们可以从 Shape 派生出不同的形状类,例如 CircleRectangle,并为每个形状实现自己的 draw() 函数:

class Circle : public Shape {
public:
  void draw() const override;
};

class Rectangle : public Shape {
public:
  void draw() const override;
};

当我们创建 CircleRectangle 对象并调用它们的 draw() 函数时,将执行相应的派生类函数,从而实现不同的绘制行为。

实战案例

考虑以下代码片段,它演示了如何使用虚函数来实现代码复用:

#include <iostream>

using namespace std;

class Shape {
public:
  virtual void draw() const {
    cout << "Drawing a generic shape" << endl;
  }
};

class Circle : public Shape {
public:
  void draw() const override {
    cout << "Drawing a circle" << endl;
  }
};

class Rectangle : public Shape {
public:
  void draw() const override {
    cout << "Drawing a rectangle" << endl;
  }
};

int main() {
  Shape* shapes[] = {new Circle(), new Rectangle()};

  for (int i = 0; i < 2; i++) {
    shapes[i]->draw();
  }

  return 0;
}

运行这段代码将打印以下输出:

Drawing a circle
Drawing a rectangle

在这个案例中,Shape 类是基类,它包含虚函数 draw()CircleRectangle 是派生类,它们重写了 draw() 函数以提供特定于形状的绘制行为。通过使用虚函数,我们可以轻松地调用不同形状的 draw()rrreee

🎜Guna semula kod🎜🎜🎜Dengan menggunakan fungsi maya, kita boleh mencapai penggunaan semula kod. Sebagai contoh, katakan kita mempunyai kelas asas Shape yang mengandungi fungsi draw(): 🎜rrreee🎜 Kita boleh memperoleh kelas Shape yang berbeza, seperti Circle code> dan <code>Rectangle, dan melaksanakan fungsi draw()nya sendiri untuk setiap bentuk: 🎜rrreee🎜Apabila kita mencipta Circle dan Rectangle objek dan panggil fungsi draw() mereka, fungsi kelas terbitan yang sepadan akan dilaksanakan untuk mencapai gelagat lukisan yang berbeza. 🎜🎜🎜Kes Praktikal🎜🎜🎜Pertimbangkan coretan kod berikut, yang menunjukkan cara menggunakan fungsi maya untuk mencapai penggunaan semula kod: 🎜rrreee🎜Menjalankan kod ini akan mencetak output berikut: 🎜rrreee🎜>Dalam kes ini, ialah kelas asas dan mengandungi fungsi maya draw(). Bulatan dan Rectangle ialah kelas terbitan yang mengatasi fungsi draw() untuk menyediakan tingkah laku lukisan khusus bentuk. Dengan menggunakan fungsi maya, kita boleh dengan mudah memanggil fungsi draw() pelbagai bentuk tanpa mengetahui jenis khusus mereka. 🎜

Atas ialah kandungan terperinci Penjelasan terperinci tentang warisan fungsi C++: Bagaimana untuk menggunakan fungsi maya untuk mencapai penggunaan semula kod?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn