Rumah >pembangunan bahagian belakang >C++ >Bolehkah saya Menggunakan Pembolehubah Ahli sebagai Argumen Lalai dalam Kaedah C?

Bolehkah saya Menggunakan Pembolehubah Ahli sebagai Argumen Lalai dalam Kaedah C?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-14 14:37:01650semak imbas

Can I Use Member Variables as Default Arguments in C   Methods?

Menggunakan Pembolehubah Ahli sebagai Argumen Lalai dalam C

Pengenalan

Apabila mencipta kelas dengan kaedah yang mengambil berbilang argumen, ia boleh memberi manfaat untuk membuat beberapa hujah pilihan. Dengan menggunakan ciri argumen lalai, anda boleh menetapkan nilai lalai untuk argumen yang boleh digunakan apabila tiada nilai diberikan oleh kod klien.

Isu: Menggunakan Pembolehubah Ahli Bukan Statik sebagai Argumen Lalai

Dalam kes anda, anda cuba menggunakan pembolehubah ahli (initPos) sebagai hujah lalai untuk fungsi ahli MoveTo anda. Walau bagaimanapun, pengkompil mengeluarkan ralat yang menunjukkan penggunaan tidak sah ahli data bukan statik.

Analisis Masalah

Pembolehubah ahli tidak boleh diakses dalam skop kaedah secara lalai, kerana ia dianggap sebahagian keadaan objek dan bukan konteks kaedah. Akibatnya, secara lalai argumen dalam fungsi ahli hanya boleh bergantung pada elemen skop dalam kelas atau global.

Penyelesaian: Melebihkan Kaedah

Untuk menyelesaikan isu ini, anda perlu menggunakan kaedah lebih muatan . Kelebihan kaedah membolehkan anda mencipta berbilang versi kaedah yang sama dengan tandatangan yang berbeza. Begini cara untuk melaksanakannya dalam kod anda:

// Object.h
class Object
{
public:
    ...
    void MoveTo(double speed);
    void MoveTo(double speed, Point position);

protected:
    Point initPos; 
    Point currPos;

};
// Object.c
void Object::MoveTo(double speed)
{
    MoveTo(speed, initPos);
}

void Object::MoveTo(double speed, Point position)
{
    // Everything is done here.
}

Dengan mentakrifkan dua versi kaedah MoveTo, anda boleh memberikan hujah lalai dengan berkesan tanpa bergantung pada pembolehubah ahli secara langsung. Kaedah MoveTo(double) memanggil kaedah MoveTo(double, Point) dengan nilai initPos sebagai hujah kedua, membolehkan anda mengekalkan fungsi yang diingini dan mengelakkan ralat pengkompil.

Atas ialah kandungan terperinci Bolehkah saya Menggunakan Pembolehubah Ahli sebagai Argumen Lalai dalam Kaedah C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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