Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah anda boleh membuat kelas saling bergantung dalam C tanpa rekursi tak terhingga?

Bagaimanakah anda boleh membuat kelas saling bergantung dalam C tanpa rekursi tak terhingga?

Barbara Streisand
Lepaskan: 2024-11-12 08:38:02
asal
693 orang telah melayarinya

How can you create interdependent classes in C   without infinite recursion?

Kelas Saling Bergantung dalam C : Menggunakan Pengisytiharan Hadapan

Percubaan untuk mencipta dua kelas yang mengandungi objek jenis satu sama lain secara langsung membawa kepada masalah rekursi tak terhingga. Untuk mencapai matlamat ini, penyelesaian menggunakan penunjuk dan pengisytiharan hadapan adalah perlu.

Dalam senario yang disediakan, pergantungan bulat antara kelas foo dan bar menyebabkan ralat. Untuk menyelesaikan masalah ini, pengisytiharan hadapan digunakan untuk mengumumkan kewujudan setiap kelas tanpa mentakrifkannya:

// bar.h
#ifndef BAR_H
#define BAR_H

// Declares the existence of foo without defining it
class foo;

class bar {
public:
  foo* getFoo();
protected:
  foo* f;
};
#endif
Salin selepas log masuk
// foo.h
#ifndef FOO_H
#define FOO_H

// Declares the existence of bar without defining it
class bar;

class foo {
public:
  bar* getBar();
protected:
  bar* f;
};
#endif
Salin selepas log masuk

Pengisytiharan hadapan ini membenarkan pengepala foo dan bar menjadi bebas, mengelakkan rujukan bulat. Takrifan penuh setiap kelas, termasuk ahli penunjuk, kemudiannya disediakan dalam fail .cpp masing-masing.

Contoh Penggunaan:

#include "foo.h"
#include "bar.h"

int main(int argc, char **argv) {
  foo myFoo;
  bar myBar;
}
Salin selepas log masuk

Kini, program dikompilasi dengan jayanya kerana pengisytiharan hadapan membolehkan kelas mengetahui satu sama lain secara tidak langsung. Mereka kini boleh menyimpan penunjuk antara satu sama lain, memutuskan kitaran dan membenarkan penciptaan kelas yang saling bergantung.

Atas ialah kandungan terperinci Bagaimanakah anda boleh membuat kelas saling bergantung dalam C tanpa rekursi tak terhingga?. 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