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

Bolehkah Kelas Dalaman Mengakses Pembolehubah Persendirian Kelas Luar dalam C?

Susan Sarandon
Lepaskan: 2024-11-28 21:31:14
asal
969 orang telah melayarinya

Can Inner Classes Access Outer Class Private Variables in C  ?

Bolehkah Kelas Dalaman Mengakses Pembolehubah Peribadi?

Pertimbangkan kod C berikut:

class Outer {
    class Inner {
    public:
        Inner() {}
        void func();
    };

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

void Outer::Inner::func() {
    var = 1;
}

const char* const Outer::MYCONST = "myconst";
Salin selepas log masuk

Setelah disusun, ini kod menjana ralat: "kelas Luar:: Dalam' tidak mempunyai ahli bernama var'". Ini menimbulkan persoalan: bolehkah kelas dalam mengakses pembolehubah persendirian kelas luar?

Jawapan:

Ya, kelas dalam mempunyai akses kepada pembolehubah persendirian kelas yang disertakan . Ini kerana kelas dalam adalah rakan kelas tertutup mereka.

Walau bagaimanapun, tidak seperti Java, tiada hubungan langsung antara objek kelas dalam dan objek kelas merangkumi. Untuk mewujudkan sambungan ini, anda mesti mewujudkannya secara manual.

Penyelesaian:

Kod ubah suai berikut menyambungkan objek kelas dalam dan luar dengan menghantar rujukan kepada kelas luar kepada pembina kelas dalam:

#include <string>
#include <iostream>

class Outer
{
    class Inner
    {
        public:
            Inner(Outer&amp; x): parent(x) {}
            void func()
            {
                std::string a = "myconst1";
                std::cout << parent.var << std::endl;

                if (a == MYCONST)
                {   std::cout << "string same" << std::endl;
                }
                else
                {   std::cout << "string not same" << std::endl;
                }
            }
        private:
            Outer&amp;  parent;
    };

    public:
        Outer()
            :i(*this)
            ,var(4)
        {}
        Outer(Outer&amp; 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();
}
Salin selepas log masuk

Kod ini menghapuskan ralat penyusunan dan membenarkan kelas dalam mengakses pembolehubah persendirian kelas luar.

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