Rumah >pembangunan bahagian belakang >C++ >Bagaimana Membuat Kelas C Saling Bergantung Tanpa Rujukan Pekeliling?
Mencipta Kelas Saling Bergantung dalam C
Soalan ini meneroka cara mencipta dua kelas C yang setiap satu mengandungi objek jenis kelas yang lain. Walau bagaimanapun, pendekatan langsung ini membawa kepada ralat disebabkan rujukan bulat.
Pelaksanaan Terus
Pertimbangkan fail pengepala berikut, yang cuba mentakrifkan dua kelas, foo dan bar , setiap satu dengan ahli yang dilindungi daripada jenis kelas lain:
// bar.h #include "foo.h" class bar { foo f; }; // foo.h #include "bar.h" class foo { bar b; };
Menyusun kod ini mengakibatkan ralat, kerana kedua-dua pengepala menyertakan satu sama lain dan mencipta rujukan bulat.
Penyelesaian: Pengisytiharan dan Penunjuk Hadapan
Untuk memecahkan kitaran rujukan ini, kita boleh menggunakan pengisytiharan dan penunjuk ke hadapan. Pengisytiharan hadapan membolehkan kami mengisytiharkan kewujudan kelas tanpa menentukan ahlinya.
Fail pengepala yang diubah suai ialah:
// bar.h class foo; // Forward declaration of foo class bar { foo* f; }; // foo.h class bar; // Forward declaration of bar class foo { bar* b; };
Dengan pengisytiharan hadapan ini, pengepala boleh merangkumi satu sama lain tanpa membuat rujukan pekeliling. Takrifan sebenar ahli kelas kemudiannya diletakkan dalam fail .cpp yang sepadan, di mana pengepala yang diperlukan disertakan.
Menggunakan Penunjuk
Untuk menggunakan kelas dengan penunjuk , kami mencipta contoh foo dan bar dengan penunjuk antara satu sama lain:
// main.cpp #include "foo.h" #include "bar.h" int main() { foo myFoo; bar myBar; myFoo.f = &myBar; // Assign the address of myBar to myFoo's f myBar.b = &myFoo; // Assign the address of myFoo to myBar's b }
Penyelesaian ini membolehkan kami membuat kelas dengan objek saling bergantung menggunakan penunjuk, memecahkan kitaran rujukan dan mencipta program yang sah.
Atas ialah kandungan terperinci Bagaimana Membuat Kelas C Saling Bergantung Tanpa Rujukan Pekeliling?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!