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
Barbara Streisandasal
2024-11-12 08:38:02665semak imbas

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
// 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

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;
}

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!

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