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

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

王林
Lepaskan: 2024-04-19 18:06:02
asal
722 orang telah melayarinya

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() { /* ... */ }
};
Salin selepas log masuk

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

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

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

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

实战案例

考虑以下示例:

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;
}
Salin selepas log masuk

此示例中,基类 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!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan