Rumah > Artikel > pembangunan bahagian belakang > Mengapa Saya Tidak Boleh Menggunakan Pembolehubah Ahli sebagai Argumen Lalai dalam Fungsi Ahli C?
Dalam pengaturcaraan berorientasikan objek, pembolehubah ahli selalunya berfungsi sebagai nilai lalai untuk argumen kaedah. Walau bagaimanapun, apabila cuba menetapkan pembolehubah ahli sebagai hujah lalai, anda mungkin menghadapi ralat seperti "penggunaan tidak sah ahli data bukan statik."
Perihalan Masalah
Anda berhasrat untuk menjadikan hujah fungsi ahli sebagai pilihan, menggunakan pembolehubah ahli sebagai nilai lalai apabila tiada hujah disediakan. Walau bagaimanapun, kod anda menghasilkan mesej ralat "penggunaan tidak sah ahli data bukan statik." Anda mengesyaki masalah dengan kod anda tetapi tidak pasti penyelesaiannya.
Coretan Kod
Di bawah ialah kod yang disediakan untuk menggambarkan isu tersebut:
class Object { public: void MoveTo(double speed, Point position); protected: Point initPos; Point currPos; }; void Object::MoveTo(double speed, Point position = initPos) { currPos = postion; }
Penyelesaian
Ungkapan argumen lalai untuk fungsi ahli hanya boleh bergantung pada elemen dalam kelas atau skop global. Selain itu, argumen lalai mesti ditakrifkan dalam pengisytiharan kaedah (fail pengepala).
Untuk menangani perkara ini, gunakan dua lebihan kaedah MoveTo: satu dengan satu argumen dan satu dengan dua argumen. Kaedah dengan argumen tunggal memanggil kaedah dengan dua argumen, melepasi nilai lalai yang dimaksudkan.
void Object::MoveTo(double speed) { MoveTo(speed, initPos); } void Object::MoveTo(double speed, Point position) { // Implementation }
Dengan menggunakan MoveTo(double) dan seterusnya memanggil MoveTo(double, Point), teknik ini membolehkan anda untuk laksanakan MoveTo sekali sahaja, mengikut prinsip KERING (Jangan Ulangi Sendiri).
Atas ialah kandungan terperinci Mengapa Saya Tidak Boleh Menggunakan Pembolehubah Ahli sebagai Argumen Lalai dalam Fungsi Ahli C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!