Mengapakah Argumen Lalai Fungsi Maya Menggunakan Nilai Kelas Asas Daripada Kelas Terbitan?

Susan Sarandon
Lepaskan: 2024-11-09 22:00:03
asal
812 orang telah melayarinya

Why Does a Virtual Function's Default Argument Use the Base Class's Value Instead of the Derived Class's?

Memahami Gelagat Argumen Lalai Fungsi Maya

Dalam C , fungsi maya membenarkan kelas terbitan untuk mengatasi pelaksanaan fungsi yang ditakrifkan dalam kelas asas. Walau bagaimanapun, tingkah laku hujah lalai untuk fungsi maya boleh mengelirukan.

Penerangan Masalah:

Pertimbangkan coretan kod berikut:

class B {
public:
    B();
    virtual void print(int data=10) {
        cout << endl << "B--data=" << data;
    }
};

class D:public B {
public:
    D();
    void print(int data=20) {
        cout << endl << "D--data=" << data;
    }
};

int main() {
    B *bp = new D();
    bp->print();
    return 0;
}
Salin selepas log masuk

Output Jangkaan:

[ D--data=20 ]

Output Sebenar:

[ D--data=10 ]

Penjelasan:

Menurut piawaian C (8.3.6.10), apabila memanggil fungsi maya melalui penunjuk atau rujukan, argumen lalai diperoleh daripada jenis statik penuding atau rujukan, bukan fungsi mengatasi kelas terbitan.

Dalam kes ini, bp ialah penunjuk jenis B, jadi hujah lalai B::print (iaitu 10) digunakan, mengatasi argumen lalai D::print (iaitu 20).

Oleh itu, output ialah D--data=10 dan bukannya D--data=20 yang dijangkakan.

Atas ialah kandungan terperinci Mengapakah Argumen Lalai Fungsi Maya Menggunakan Nilai Kelas Asas Daripada Kelas Terbitan?. 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