Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bolehkah fungsi C++ diisytiharkan maya? Apakah peranan fungsi maya?

Bolehkah fungsi C++ diisytiharkan maya? Apakah peranan fungsi maya?

王林
王林asal
2024-04-19 18:06:02687semak imbas

Fungsi maya dalam C++ membenarkan kelas terbitan mentakrifkan semula kaedah yang diwarisi daripada kelas asas untuk mencapai polimorfisme. Sintaksnya ialah: mengisytiharkan fungsi maya dengan kata kunci maya dalam kelas asas, dan mentakrifkannya semula dengan menimpa dalam kelas terbitan. Dengan memanggil fungsi maya melalui penunjuk atau rujukan, objek kelas terbitan boleh memanggil fungsi maya kelas asas. Fungsi utama fungsi maya termasuk: merealisasikan polimorfisme, menyokong pengikatan dinamik dan menyediakan abstraksi.

C++ 函数可以声明为虚函数吗?虚函数的作用是什么?

Fungsi Maya dalam C++

Pengenalan

Fungsi maya ialah jenis fungsi ahli khas yang membenarkan kelas terbitan mentakrifkan semula kaedah yang diwarisi daripada kelas asas. Ini membolehkan polimorfisme, iaitu objek kelas terbitan boleh dirawat dengan cara yang sama seperti objek kelas asas.

Syntax

Fungsi maya diisytiharkan dalam kelas asas, menggunakan kata kunci maya: virtual 关键字:

class Base {
public:
  virtual void func() { /* ... */ }
};

在派生类中,可以重新定义虚函数:

class Derived : public Base {
public:
  void func() override { /* ... */ }
};

虚函数调用通过指针或引用完成,因此派生类对象可以调用父类中的虚函数:

Base* base = new Derived;
base->func(); // 调用 Derived::func()

实战案例

考虑以下示例:

class Shape {
public:
  virtual double area() const = 0;
};

class Circle : public Shape {
public:
  Circle(double radius) : _radius(radius) {}
  double area() const override { return _radius * _radius * 3.14; }
  double _radius;
};

class Square : public Shape {
public:
  Square(double side) : _side(side) {}
  double area() const override { return _side * _side; }
  double _side;
};

int main() {
  Shape* shapes[] = {new Circle(5), new Square(4)};
  double total_area = 0;
  for (Shape* shape : shapes) {
    total_area += shape->area();
  }
  std::cout << "Total area: " << total_area << std::endl;
}

此示例中,基类 Shape 定义了一个抽象函数 area(),派生类 CircleSquare 提供自己的实现。主函数创建一个 Shaperrreee

Dalam kelas terbitan, fungsi maya boleh ditakrifkan semula:

rrreeepanggilan maya dibuat melalui penunjuk atau Rujukan telah lengkap, jadi objek kelas terbitan boleh memanggil fungsi maya dalam kelas induk: rrreee

Contoh praktikal

  • Pertimbangkan contoh berikut: rrreeeDalam contoh ini, kelas asas Shape mentakrifkan Fungsi abstraksi kawasan(), kelas terbitan Bulatan dan Square menyediakan pelaksanaannya sendiri. Fungsi utama mencipta tatasusunan penunjuk Shape yang menunjuk ke objek kelas terbitan dan mengira jumlah kawasan melalui panggilan fungsi maya.
  • Fungsi
  • Fungsi utama fungsi maya termasuk:
Melaksanakan polimorfisme: 🎜Benarkan objek kelas terbitan berinteraksi dengan objek kelas asas dengan cara yang sama. 🎜🎜🎜Sokong pengikatan dinamik: 🎜Ikat panggilan fungsi pada masa jalan dan panggil kaedah kelas terbitan berdasarkan jenis objek sebenar. 🎜🎜🎜Sediakan abstraksi: 🎜Kelas asas boleh menentukan kaedah abstrak yang dilaksanakan secara konkrit oleh kelas terbitan. 🎜🎜

Atas ialah kandungan terperinci Bolehkah fungsi C++ diisytiharkan maya? Apakah peranan fungsi maya?. 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