Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Aplikasi praktikal fungsi maya C++: contoh kod dan penyelesaian masalah

Aplikasi praktikal fungsi maya C++: contoh kod dan penyelesaian masalah

WBOY
WBOYasal
2024-04-29 08:36:02843semak imbas

Fungsi maya membenarkan fungsi kelas asas mengatasi dalam kelas terbitan dan memanggil fungsi yang sesuai berdasarkan jenis objek semasa masa jalan: Cipta fungsi maya: Gunakan kata kunci maya dalam kelas asas untuk mengisytiharkan fungsi. Gantikan fungsi maya: Gunakan kata kunci ganti dalam kelas terbitan untuk mengatasi fungsi maya kelas asas. Panggilan sebenar: Apabila objek kelas terbitan dihalakan melalui penuding atau rujukan kelas asas, versi yang diganti akan dipanggil. Fungsi maya terbongkar: Jika tidak ditindih, pelaksanaan asal kelas asas akan dipanggil. Panggil dengan penuding atau rujukan: Laksanakan polimorfisme, membenarkan penuding atau rujukan daripada kelas asas untuk menunjuk ke objek kelas terbitan dan memanggil fungsi mengatasi yang sesuai pada masa jalan.

C++ 虚拟函数实战应用:代码示例与解疑

Aplikasi praktikal fungsi maya dalam C++: contoh kod dan penyelesaian masalah

Pengenalan kepada fungsi maya

Fungsi maya ialah mekanisme polimorfisme dalam C++. Ia membenarkan fungsi dalam kelas asas untuk ditindih dalam kelas terbitan, membenarkan fungsi yang sesuai dipanggil pada masa jalan berdasarkan jenis objek sebenar.

Buat fungsi maya

Untuk mencipta fungsi maya, anda perlu mengisytiharkan fungsi dalam kelas asas menggunakan kata kunci maya, seperti yang ditunjukkan di bawah: virtual 关键字声明该函数,如下所示:

class Base {
public:
    virtual void print() {
        cout << "Base class" << endl;
    }
};

覆盖虚拟函数

在派生类中,可以使用 override 关键字覆盖基类中的虚拟函数,如下所示:

class Derived : public Base {
public:
    override void print() {
        cout << "Derived class" << endl;
    }
};

实战案例

考虑以下一个简单的示例:

#include <iostream>

using namespace std;

class Animal {
public:
    virtual void speak() {
        cout << "Animal speaks" << endl;
    }
};

class Dog : public Animal {
public:
    override void speak() {
        cout << "Dog barks" << endl;
    }
};

int main() {
    Animal* a = new Dog();
    a->speak();  // 输出:Dog barks
    return 0;
}

在这个示例中,基类 Animal 定义了 speak() 虚拟函数,它在 Dog 派生类中被覆盖。当我们通过 Animal* 指针调用 speak()rrreee

Timpa fungsi maya

Dalam kelas terbitan, anda boleh Gunakan kata kunci override untuk mengatasi fungsi maya dalam kelas asas seperti berikut:

rrreeeContoh praktikal

Pertimbangkan contoh mudah berikut:

rrreee

Dalam contoh ini, kelas asas Animal mentakrifkan fungsi maya speak(), yang ditindih dalam kelas terbitan Dog. Apabila kita memanggil fungsi speak() melalui penuding Animal*, versi yang diganti dipanggil, mengeluarkan "Salak anjing".

Penyelesaian soalan

S: Mengapa anda perlu menggunakan penunjuk atau rujukan untuk memanggil fungsi maya?

🎜🎜Jawapan: Untuk mencapai polimorfisme, penunjuk atau rujukan daripada kelas asas boleh menunjuk kepada objek kelas terbitan, membenarkan fungsi mengatasi yang sesuai dipanggil pada masa jalan. 🎜🎜🎜S: Apakah yang berlaku jika fungsi maya tidak ditindih dalam kelas terbitan? 🎜🎜🎜Jawapan: Dalam kes ini, pelaksanaan asal dalam kelas asas akan dipanggil. 🎜

Atas ialah kandungan terperinci Aplikasi praktikal fungsi maya C++: contoh kod dan penyelesaian masalah. 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