Rumah >pembangunan bahagian belakang >C++ >Mengapa Anda Tidak Boleh Membebankan Fungsi Statik dan Bukan Statik dalam C ?

Mengapa Anda Tidak Boleh Membebankan Fungsi Statik dan Bukan Statik dalam C ?

Susan Sarandon
Susan Sarandonasal
2024-10-27 14:16:01439semak imbas

Why Can't You Overload Static and Non-Static Functions in C  ?

Melebihkan Fungsi Statik dengan Fungsi Bukan Statik dalam C

Dalam C , melebihkan fungsi statik dan bukan statik dengan nama yang sama bukanlah dibenarkan. Ini dinyatakan secara eksplisit dalam piawaian C, yang melarang fungsi lebih muatan yang hanya berbeza dalam jenis pulangan atau mempunyai nama dan jenis parameter yang sama jika salah satu daripadanya adalah statik.

Pertimbangkan kelas berikut:

<code class="cpp">class Foo {
    string bla;
    Foo() { bla = "nonstatic"; }

    void print() { cout << bla << endl; }
    static void print() { cout << "static" << endl; }
};</code>

Walaupun takrif kelas ini mungkin kelihatan munasabah, ia tidak sah mengikut piawaian C. Lebih memuatkan fungsi statik dan bukan statik adalah dilarang kerana ia akan membawa kepada kekaburan, kerana fungsi statik juga boleh dipanggil menggunakan sintaks akses ahli objek (.).

Sebagai contoh, dalam coretan kod berikut:

<code class="cpp">Foo f;
f.print();</code>

Tidak jelas sama ada fungsi cetakan statik atau fungsi cetakan bukan statik harus dipanggil.

Selain itu, C tidak menyediakan cara untuk menentukan sama ada fungsi dipanggil secara statik atau tidak, seperti dalam PHP. Kata kunci ini, yang menunjuk kepada objek yang digunakan untuk fungsi tersebut, akan sentiasa bukan nol.

Ringkasnya

Melebihi beban fungsi statik dan bukan statik dengan nama yang sama tidak dibenarkan dalam C . Selain itu, tiada mekanisme untuk membezakan antara panggilan fungsi statik dan bukan statik dalam badan fungsi.

Atas ialah kandungan terperinci Mengapa Anda Tidak Boleh Membebankan Fungsi Statik dan Bukan Statik dalam C ?. 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