Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Memanggil Fungsi Maya Kelas Asas daripada Kelas Terbitan dalam 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; } };
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 } };
Dalam sintaks ini:
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; }
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!