Rumah > pembangunan bahagian belakang > C++ > Bilakah Fungsi Maya C Boleh Mempunyai Jenis Pulangan Kovarian?

Bilakah Fungsi Maya C Boleh Mempunyai Jenis Pulangan Kovarian?

DDD
Lepaskan: 2024-11-28 05:33:16
asal
603 orang telah melayarinya

When Can C   Virtual Functions Have Covariant Return Types?

Jenis Pulangan Kovarian dalam Fungsi Maya C

Dalam C , kelas yang diwarisi boleh melaksanakan fungsi maya dengan jenis pulangan yang berbeza. Walau bagaimanapun, jenis pulangan ini mestilah kovarian dengan jenis pulangan asal.

Kovarian bermakna jenis pulangan dalam kelas terbitan adalah sekurang-kurangnya sama dengan jenis pulangan dalam kelas asas. Contohnya, jika fungsi kelas asas mengembalikan penuding Asas, fungsi kelas terbitan boleh mengembalikan penuding Terbitan.

Ini dibenarkan kerana sebarang penuding kepada objek kelas terbitan boleh ditukar secara tersirat kepada penuding kepada kelas asas objek. Oleh itu, panggilan kepada fungsi maya dalam kelas asas sentiasa boleh mengembalikan penunjuk kepada objek kelas asas, walaupun pelaksanaan kelas terbitan mengembalikan penunjuk kepada objek kelas terbitan.

Pertimbangkan contoh berikut:

class Base {
public:
    virtual ~Base() {}

    virtual Base* clone() const = 0;
};

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

Dalam contoh ini, kelas Base mentakrifkan klon fungsi maya tulen yang mengembalikan penuding Base. Dalam kelas Derived, fungsi klon ditindih untuk mengembalikan penunjuk Derived. Ini dibenarkan kerana Derived ialah kelas terbitan bagi Base dan penunjuk Derived boleh ditukar secara tersirat kepada penunjuk Base.

Atas ialah kandungan terperinci Bilakah Fungsi Maya C Boleh Mempunyai Jenis Pulangan Kovarian?. 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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan