Rumah >pembangunan bahagian belakang >C++ >Adakah Fungsi Maya Sebaris Mitos, atau Hanya Disalah Faham?

Adakah Fungsi Maya Sebaris Mitos, atau Hanya Disalah Faham?

Patricia Arquette
Patricia Arquetteasal
2024-12-27 06:39:14172semak imbas

Are Inline Virtual Functions a Myth, or Just Misunderstood?

Adakah Fungsi Maya Sebaris Benarkah Mitos?

Dalam semakan kod, ulasan "fungsi maya tidak perlu sebaris" menimbulkan persoalan tentang penggunaan fungsi maya sebaris. Walaupun potensi manfaatnya, timbul keraguan tentang kepraktisannya.

Dalam senario di mana fungsi dipanggil terus pada objek, fungsi maya sebaris mungkin kelihatan sesuai. Walau bagaimanapun, seseorang mungkin tertanya-tanya mengapa fungsi maya akan digunakan jika objek digunakan untuk panggilan kaedah.

Coretan kod di bawah menunjukkan isu:

class Temp {
public:
    virtual ~Temp() {}
    virtual void myVirtualFunction() const { cout << "Temp::myVirtualFunction" << endl; }
};

class TempDerived : public Temp {
public:
    void myVirtualFunction() const { cout << "TempDerived::myVirtualFunction" << endl; }
};

int main() {
    TempDerived aDerivedObj;
    // Compiler expands virtual functions
    aDerivedObj.myVirtualFunction();

    // Object type for Temp* is known
    Temp* pTemp = &aDerivedObj;
    pTemp->myVirtualFunction();

    return 0;
}

Sementara pengkompil boleh menyelaraskan fungsi maya panggil apabila kelas objek yang tepat diketahui (cth., aDerivedObj), ia tidak boleh berbuat demikian apabila objek itu diakses melalui penuding (pTemp).

Batasan ini menimbulkan persoalan: patutkah fungsi maya sebaris dielakkan kerana pengembangannya sering dihadkan?

Jawapannya:

Fungsi maya boleh diselaraskan dalam keadaan tertentu, seperti yang diterangkan dalam Soalan Lazim C:

"Satu-satunya masa panggilan maya sebaris boleh diselaraskan ialah apabila pengkompil mengetahui 'kelas tepat' objek yang merupakan sasaran panggilan fungsi maya Ini boleh berlaku hanya apabila pengkompil mempunyai objek sebenar dan bukannya penunjuk atau rujukan kepada objek."

Atas ialah kandungan terperinci Adakah Fungsi Maya Sebaris Mitos, atau Hanya Disalah Faham?. 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