SORU
16 ŞUBAT 2011, ÇARŞAMBA


C iç sınıflar otomatik olarak arkadaş mısınız?

Ben C sınıfı bir iç tanımlarsanız otomatik olarak içeren sınıf arkadaşın mı? Örneğin, bu yasal

class Outer {
public:
    class Inner {
    public:
        void mutateOuter(Outer& o);
    };

private:
    int value;
};

void Outer::Inner::mutateOuter(Outer& o) {
    o.value   ; // Legal?  Or not?
}

Bazı Derleyiciler (VS2003) bu kod işe yaramaz, ama en azından bazı Derleyiciler üzerinde çalışıyor o kadar sistemli duydum denedim, ondan soruyorum. Bu konuda C spec ilgili bir bölüm bulamıyorum, ve eğer biri olduğunu söyler ya da yasal olmayan bir şey belirli alıntı yapabilirsen çok iyi olur.

CEVAP
7 ŞUBAT 2013, PERŞEMBE


Daha fazla veya daha az 4 ** aynı soruyu kendime sorduktan sonra, C 11 (görünüşte) updated cevabı paylaşmak istedim:

http://stackoverflow.com/a/14759027/1984137 alıntı:

standart $11.7.1

"İç içe geçmiş bir sınıfın bir üyesi olarak aynı erişim haklarına sahip başka bir üye. Kapsayan bir sınıfın üyeleri hiçbir özel var iç içe geçmiş bir sınıf üyeleri için erişim; her zamanki erişim kuralları olacaktır ". itaat

ve her zamanki erişim kuralları belirlemek:

"Bir sınıfın bir üyesi de bütün isimleri sınıfı erişebilirsiniz erişim..."

belirli örnekler standart olarak verilmiştir:

class E {
    int x;
    class B { };

    class I {
        B b; // OK: E::I can access E::B
        int y;
        void f(E* p, int i) {
            p->x = i; // OK: E::I can access E::x
        }
    };
}

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • AutoklubZAPRESIC

    AutoklubZAPR

    17 Mayıs 2011
  • Smith Micro Graphics

    Smith Micro

    15 Mayıs 2008
  • Tinkernut

    Tinkernut

    28 Aralık 2006