Rumah >pembangunan bahagian belakang >C++ >Bolehkah Kelas Dalaman dalam C Mengakses Ahli Persendirian Kelas Luar Mereka?

Bolehkah Kelas Dalaman dalam C Mengakses Ahli Persendirian Kelas Luar Mereka?

Patricia Arquette
Patricia Arquetteasal
2024-11-27 13:36:13420semak imbas

Can Inner Classes in C   Access Private Members of Their Outer Class?

Bolehkah Kelas Dalaman Mengakses Pembolehubah Peribadi?

Dalam contoh kod ini, kelas dalam, Dalaman, ditakrifkan dalam kelas luar, Luar . Apabila tika Inner dicipta, ia dijangka mempunyai akses kepada var pembolehubah ahli persendirian kelas Luar. Walau bagaimanapun, apabila disusun, ralat berlaku, menyatakan bahawa Inner tidak mempunyai ahli bernama var.

Kelas Dalaman dan Akses Ahli

Kelas dalaman dalam C dianggap sebagai rakan daripada kelas luarnya. Sebagai rakan, kelas dalaman mempunyai akses kepada semua ahli kelas luar, termasuk ahli persendirian. Oleh itu, contoh Inner sepatutnya boleh mengakses var peribadi Outer.

Masalah dan Penyelesaiannya

Ralat berpunca daripada kekurangan sambungan antara contoh Dalaman dan kejadian Luaran. Di Jawa, terdapat hubungan ibu bapa-anak yang tersirat antara kelas dalaman dan kelas lampirannya. Walau bagaimanapun, dalam C , perhubungan ini mesti ditakrifkan secara eksplisit.

Untuk menyelesaikan isu tersebut, rujukan kepada kelas luar mesti diserahkan kepada pembina kelas dalam. Ini memberikan kelas dalam konteks yang diperlukan untuk mengakses ahli kelas luar.

Berikut ialah contoh yang menunjukkan cara mewujudkan sambungan induk-anak dan membenarkan Inner mengakses var pembolehubah persendirian Luar:

#include <string>
#include <iostream>

class Outer {
public:
    class Inner {
    public:
        Inner(Outer& x): parent(x) {}  // Pass a reference to the outer class

        void func() {
            std::string a = "myconst1";
            std::cout << parent.var << std::endl;

            if (a == Outer::MYCONST)
                std::cout << "string same" << std::endl;
            else
                std::cout << "string not same" << std::endl;
        }

    private:
        Outer& parent;
    };

    public:
        Outer(): i(*this), var(4) {}
        Outer(Outer& other): i(other), var(22) {}
        void func() {
            i.func();
        }

    private:
        static const char* const MYCONST;
        Inner i;
        int var;
};

const char* const Outer::MYCONST = "myconst";

int main() {
    Outer o1;
    Outer o2(o1);
    o1.func();
    o2.func();

    return 0;
}

Kod yang disemak ini membenarkan Inner mengakses var kerana pembina Inner mewujudkan hubungan ibu bapa-anak antara Inner dan Outer instance yang menciptanya.

Atas ialah kandungan terperinci Bolehkah Kelas Dalaman dalam C Mengakses Ahli Persendirian Kelas Luar Mereka?. 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