Rumah >pembangunan bahagian belakang >C++ >Bolehkah Kelas Terbitan Mengatasi Fungsi Maya dengan Jenis Pulangan Kovarian yang Berbeza?

Bolehkah Kelas Terbitan Mengatasi Fungsi Maya dengan Jenis Pulangan Kovarian yang Berbeza?

DDD
DDDasal
2024-12-04 02:09:11325semak imbas

Can a Derived Class Override a Virtual Function with a Different, Covariant Return Type?

Bolehkah Kelas Diwarisi Melaksanakan Fungsi Maya dengan Jenis Pulangan Berbeza?

Dalam pengaturcaraan berorientasikan objek, fungsi maya membenarkan tingkah laku polimorfik di mana subkelas boleh menyediakan pelaksanaan kaedah mereka sendiri yang ditakrifkan dalam kelas asas. Walaupun parameter fungsi maya yang diganti mesti sepadan dengan pelaksanaan kelas asasnya, persoalan timbul: bolehkah jenis pulangan berbeza?

Dalam Jenis Pulangan Kovarian, Jawapannya ialah Ya

Dalam keadaan tertentu, kelas terbitan sememangnya boleh mengatasi fungsi maya dengan jenis pulangan yang berbeza. Ini dibenarkan jika jenis pulangan dalam kelas terbitan ialah kovarian dengan jenis pulangan dalam kelas asas. Kovarians bermaksud jenis pulangan kelas terbitan ialah subjenis, atau terbitan daripada, jenis pulangan kelas asas.

Sebagai contoh, pertimbangkan kod berikut:

class Base {
public:
    virtual ~Base() {}
    virtual Base* clone() const = 0;
};

class Derived: public Base {
public:
    virtual Derived* clone() const {
        return new Derived(*this);
    }
};

Dalam contoh ini, kelas asas Base mentakrifkan klon fungsi maya tulen yang mengembalikan penunjuk ke Base. Kelas terbitan Derived mengatasi fungsi ini untuk mengembalikan penunjuk kepada Derived. Walaupun jenis pulangan berbeza, ia adalah kovarian kerana Derived ialah subjenis Base.

Pemahaman Konseptual

Apabila memanggil fungsi maya pada penunjuk ke objek kelas asas , pengkompil secara dinamik memilih pelaksanaan yang sesuai berdasarkan jenis objek sebenar. Nilai pulangan bagi fungsi yang diganti masih boleh diberikan kepada pembolehubah jenis kelas asas kerana penukaran penunjuk adalah tersirat dan ditakrifkan dengan baik.

Kesimpulan

Dalam ringkasan, kelas yang diwarisi boleh melaksanakan fungsi maya dengan jenis pulangan yang berbeza jika jenis pulangan adalah kovarian dengan jenis pulangan asal. Ini membolehkan gelagat polimorfik yang selamat di mana kelas terbitan boleh menyediakan pelaksanaan khusus mereka sendiri tanpa mengganggu keserasian jenis yang dijangkakan.

Atas ialah kandungan terperinci Bolehkah Kelas Terbitan Mengatasi Fungsi Maya dengan Jenis Pulangan Kovarian yang Berbeza?. 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