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!