Pembina Penukaran lwn. Operator Penukaran: Keutamaan
Dalam C , kedua-dua pembina penukaran dan pengendali penukaran menyediakan cara untuk menukar objek antara jenis yang berbeza. Apabila kedua-duanya tersedia untuk penukaran tertentu, memahami keutamaannya adalah penting untuk menentukan yang akan dipanggil.
Penubuhan Keutamaan
Keutamaan antara pembina penukaran dan pengendali penukaran ialah ditakrifkan oleh standard C (13.3.1.4):
Leraian beban berlebihan digunakan untuk memilih penukaran yang ditentukan pengguna untuk digunakan. Fungsi calon dipilih seperti berikut:
- Menukar pembina (12.3.1) jenis destinasi ialah fungsi calon.
- Fungsi penukaran jenis sumber dan kelas asasnya yang menghasilkan a jenis yang serasi dengan jenis destinasi ialah fungsi calon.
Operator Overriding Constructor
Dalam kod contoh yang disediakan, di mana kedua-dua pembina penukaran dan operator penukaran ditakrifkan untuk kelas A hingga B, operator penukaran mempunyai keutamaan:
class A; class B { public: B(){} B(const A&) //conversion constructor { cout << "called B's conversion constructor" << endl; } }; class A { public: operator B() //conversion operator { cout << "called A's conversion operator" << endl; return B(); } };
Ini kerana, apabila mengikat parameter rujukan (di sini, parameter objek tersirat bagi fungsi penukaran), bukan const rujukan dalam fungsi penukaran (A&) mempunyai keutamaan berbanding rujukan const dalam pembina penukaran (const A&).
Pertimbangan Falsafah Berorientasikan Objek
Mengenai soalan falsafah kelas mana yang harus bertanggungjawab untuk menukar objek, sisi standard dengan kelas sumber (A dalam kes ini). Ini sejajar dengan prinsip enkapsulasi, kerana ia membenarkan kelas sumber mengawal proses penukaran dan memastikan ketepatan objek yang terhasil (B).
Akhirnya terpulang kepada budi bicara pembangun untuk menentukan mekanisme penukaran yang sesuai untuk senario tertentu, dengan mengambil kira faktor seperti enkapsulasi, abstraksi dan kebolehbacaan kod.
Atas ialah kandungan terperinci Apabila Menukar Antara Jenis: Adakah Objek Sumber atau Destinasi Diutamakan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!