Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Kelas Dalaman dalam C Boleh Mengakses Ahli Persendirian Kelas Terlampirnya?

Bagaimanakah Kelas Dalaman dalam C Boleh Mengakses Ahli Persendirian Kelas Terlampirnya?

Patricia Arquette
Lepaskan: 2024-12-08 06:51:14
asal
248 orang telah melayarinya

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

Kelas Dalaman Mengakses Pembolehubah Peribadi dalam C

Dalam C , kelas dalam mempunyai keupayaan unik untuk mengakses ahli persendirian kelas tertutup. Pertimbangkan contoh berikut:

class Outer {

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

private:
    static const char* const MYCONST;
    int var;
};
Salin selepas log masuk

Dalam contoh ini, kelas Dalam ditakrifkan dalam kelas Luar. Mengikut peraturan skop tradisional, pembolehubah ahli var Luar tidak boleh diakses oleh Dalam. Walau bagaimanapun, dalam C , kelas dalam sememangnya rakan kelas tertutupnya.

Akibatnya, objek jenis Outer::Inner boleh mengakses pembolehubah ahli persendirian Outer. Walau bagaimanapun, adalah penting untuk ambil perhatian bahawa akses ini hanya diberikan dalam skop kelas dalam.

Untuk menggambarkan lagi konsep ini, mari kita ubah suai kaedah func() kelas Dalam seperti berikut:

void Outer::Inner::func() {
    var = 1;
}
Salin selepas log masuk

Sekarang, jika kami cuba menyusun kod ini, kami akan menemui mesej ralat yang menunjukkan bahawa 'kelas Luar:: Dalam' tidak mempunyai ahli bernama 'var'. Ini kerana walaupun kelas dalaman mempunyai akses kepada ahli persendirian, mereka tidak mewarisi perhubungan ahli dengan kelas yang disertakan.

Untuk mewujudkan perhubungan ahli yang betul dalam kelas dalaman, kita perlu membuat rujukan secara manual kepada melampirkan kelas, seperti yang ditunjukkan dalam contoh berikut:

class Outer
{
    class Inner
    {
        public:
            Inner(Outer& x): parent(x) {}
            void func()
            {
                std::cout << parent.var << std::endl;
            }
        private:
            Outer& parent;
    };

    public:
        Outer() : i(*this), var(4) {}
        void func()
        {
            i.func();
        }
    private:
        Inner i;
        int var;
};

int main()
{
    Outer o;
    o.func();
}
Salin selepas log masuk

Dalam contoh ini, pembina kelas Dalam mengambil rujukan kepada kelas Luar sebagai hujah. Ini membenarkan objek jenis Outer::Inner mengakses ahli peribadi Outer melalui rujukan induk.

Atas ialah kandungan terperinci Bagaimanakah Kelas Dalaman dalam C Boleh Mengakses Ahli Persendirian Kelas Terlampirnya?. 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