C++ ialah bahasa pengaturcaraan yang berkuasa, tetapi semasa penggunaan, anda pasti akan menghadapi pelbagai masalah. Antaranya, tandatangan pembina yang sama muncul beberapa kali ialah ralat sintaks yang biasa. Artikel ini menerangkan punca dan penyelesaian kepada ralat ini.
1. Punca ralat
Dalam C++, pembina digunakan untuk memulakan ahli data objek apabila mencipta objek. Walau bagaimanapun, jika tandatangan pembina yang sama ditakrifkan dalam kelas yang sama (iaitu, jenis dan susunan parameter adalah sama), pengkompil tidak dapat menentukan pembina yang hendak dipanggil, menyebabkan ralat kompilasi.
Sebagai contoh, kod berikut mempunyai tandatangan pembina yang sama:
class A{ public: A(int a, int b){ this->a = a; this->b = b; } A(int c, int d){ this->c = c; this->d = d; } private: int a, b, c, d; };
Dalam kod di atas, dua tandatangan pembina yang sama ditakrifkan dalam kelas A: A(int, int). Ini akan menyebabkan pengkompil tidak dapat menentukan pembina yang hendak dipanggil, mengakibatkan ralat sintaks.
2. Penyelesaian
Untuk menyelesaikan masalah tandatangan pembina yang sama, kita boleh menggunakan lebihan fungsi dan nilai lalai fungsi.
Function overloading membolehkan kami mentakrifkan berbilang fungsi dengan nama yang sama tetapi senarai parameter yang berbeza dalam kelas yang sama. Oleh itu, kita boleh menulis pembina yang berbeza untuk senarai parameter yang berbeza dan mengelakkan daripada mempunyai tandatangan pembina yang sama.
Sebagai contoh, untuk kelas A di atas, kita boleh mentakrifkan pembina dengan cara berikut:
class A{ public: A(int a, int b){ this->a = a; this->b = b; } A(int c, int d, int e){ this->c = c; this->d = d; this->e = e; } private: int a, b, c, d, e; };
Dalam kod di atas, kita telah menentukan dua tandatangan pembina yang berbeza: A(int,int) dan A(int, int,int ), dengan itu mengelakkan masalah tandatangan pembina yang sama.
Fungsi Lalai membolehkan kami menyediakan nilai lalai untuk parameter sesuatu fungsi. Oleh itu, kita boleh menentukan nilai lalai yang berbeza untuk tandatangan pembina yang sama dan mengelakkan ralat penyusunan.
Sebagai contoh, untuk kelas A di atas, kita boleh mentakrifkan pembina dengan cara berikut:
class A{ public: A(int a, int b, int c=0, int d=0){ this->a = a; this->b = b; this->c = c; this->d = d; } private: int a, b, c, d; };
Dalam kod di atas, kita telah menetapkan lalai untuk dua parameter terakhir pembina A(int,int,int,int) nilai, dengan itu mengelakkan masalah tandatangan pembina yang sama seperti A(int,int).
3. Ringkasan
Dalam C++, tandatangan pembina yang sama akan menyebabkan ralat kompilasi. Untuk mengelakkan ralat ini, kita boleh menggunakan lebihan fungsi dan nilai lalai fungsi. Ini bukan sahaja membolehkan kami mereka bentuk pembina kelas dengan lebih fleksibel, tetapi juga meningkatkan kebolehbacaan dan kebolehselenggaraan program.
Atas ialah kandungan terperinci Ralat sintaks C++: Tandatangan pembina yang sama muncul beberapa kali, bagaimana untuk menyelesaikannya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!