Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Saya Boleh Memanggil Fungsi Maya Kelas Asas daripada Kelas Terbitan dalam C?

Bagaimanakah Saya Boleh Memanggil Fungsi Maya Kelas Asas daripada Kelas Terbitan dalam C?

Barbara Streisand
Lepaskan: 2024-12-13 02:28:09
asal
906 orang telah melayarinya

How Can I Call a Base Class's Virtual Function from a Derived Class in C  ?

Memanggil Fungsi Maya Kelas Asas Walaupun Ditindih dalam C

Dalam pengaturcaraan berorientasikan objek, adalah perkara biasa bagi kelas terbitan untuk mengatasi fungsi maya daripada kelas asas mereka. Walau bagaimanapun, situasi mungkin timbul apabila kelas terbitan memerlukan akses kepada fungsi ganti.

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

Dalam contoh di atas, kelas Bar mengatasi fungsi printStuff, tetapi ia juga mungkin perlu mengakses versi kelas asas.

Java's super vs. C Sintaks

Di Java, sintaks super.funcname() membenarkan kelas terbitan untuk memanggil kaedah kelas asas. Walau bagaimanapun, C memerlukan pendekatan yang berbeza. Untuk memanggil fungsi kelas asas yang diganti, gunakan sintaks berikut:

class Bar : public Foo {
  // ...

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

Dalam sintaks ini:

  • tindih adalah pilihan tetapi disyorkan untuk membantu pengkompil memastikan penggantian yang betul.
  • Foo::printStuff() secara eksplisit memanggil kelas asas fungsi.

Penamaan eksplisit ini diperlukan kerana C membenarkan pewarisan berbilang, tidak seperti Java. Akibatnya, pengkompil perlu mengetahui kaedah kelas asas yang hendak dipanggil apabila ditindih.

Contoh Penggunaan

Kembali kepada kod asal, pengubahsuaian berikut membenarkan Bar: :printStuff() untuk mengakses kedua-dua ahli datanya sendiri y dan ahli data kelas asas x:

void printStuff() override {
    Foo::printStuff();
    std::cout << y << std::endl;
}
Salin selepas log masuk

Ini bertambah baik versi printStuff mengeluarkan nilai x kelas asas, diikuti dengan nilai y kelas terbitan, menyediakan kefungsian yang diingini.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Memanggil Fungsi Maya Kelas Asas daripada Kelas Terbitan dalam C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan