Rumah > pembangunan bahagian belakang > C++ > Apabila Menukar Antara Jenis: Adakah Objek Sumber atau Destinasi Diutamakan?

Apabila Menukar Antara Jenis: Adakah Objek Sumber atau Destinasi Diutamakan?

Mary-Kate Olsen
Lepaskan: 2024-11-07 08:39:03
asal
798 orang telah melayarinya

When Converting Between Types: Does the Source or Destination Object Take Precedence?

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 << &quot;called B's conversion constructor&quot; << endl; 
         } 
};

class A { 
      public: 
         operator B() //conversion operator
         { 
              cout << &quot;called A's conversion operator&quot; << endl; 
              return B(); 
         } 
};
Salin selepas log masuk

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!

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