Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Memanggil Fungsi Maya Kelas Asas dalam C Selepas Mengatasinya?

Bagaimanakah Saya Memanggil Fungsi Maya Kelas Asas dalam C Selepas Mengatasinya?

DDD
DDDasal
2024-12-05 11:22:10990semak imbas

How Do I Call a Base Class's Virtual Function in C   After Overriding It?

Memanggil Fungsi Maya Kelas Asas dalam C Selepas Mengatasi

Dalam pembangunan perisian, adalah perkara biasa untuk menghadapi senario di mana anda perlu memanggil pangkalan fungsi kelas daripada kelas terbitan, walaupun anda telah mengatasi fungsi itu. Dalam C , tidak seperti Java, anda tidak boleh menggunakan sintaks super.funcname() mudah untuk mencapai ini.

Pertimbangkan coretan kod berikut:

class Foo {
public:
    int x;

    virtual void printStuff() {
        std::cout << x << std::endl;
    }
};

class Bar : public Foo {
public:
    int y;

    void printStuff() {
        // I would like to call Foo.printStuff() here...
        std::cout << y << std::endl;
    }
};

Dalam contoh ini, Bar mewarisi daripada Foo dan mengatasi fungsi printStuff(). Walau bagaimanapun, anda mungkin mahu mengekalkan fungsi asal Foo::printStuff() dalam konteks tertentu.

Untuk memanggil fungsi printStuff() kelas asas dalam C , anda mesti menamakan kelas asas secara eksplisit menggunakan :: pengendali. Begini caranya:

class Bar : public Foo {
  // ...

  void printStuff() override {  // help the compiler to check
    Foo::printStuff(); // calls base class' function
  }
};

Dalam kod yang diubah suai ini, fungsi kelas asas Foo::printStuff() dipanggil dalam fungsi Bar::printStuff() yang diganti. Kata kunci override membantu pengkompil mengesahkan bahawa fungsi itu sememangnya mengatasi fungsi kelas asas.

Dengan memanggil fungsi kelas asas secara eksplisit, anda memperoleh kefleksibelan untuk menggunakan kedua-dua pelaksanaan kelas asas dan terbitan printStuff(). Ini boleh berguna dalam pelbagai senario, seperti memanggil fungsi asal untuk melaksanakan tugas biasa sebelum atau selepas pelaksanaan yang ditindih.

Atas ialah kandungan terperinci Bagaimanakah Saya Memanggil Fungsi Maya Kelas Asas dalam C Selepas Mengatasinya?. 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