30 Mart 2018 Cuma

protected Üye Alan - Protected Member

Giriş
Açıklaması şöyle.
You can only access protected members from your own base class instance.
Normalde protected üye alana sadece kalıtan sınıftan erişilebilir. Derleme hatasını görmek için şöyle yaparız.
class BaseTest
{
public:
    BaseTest(){};

    BaseTest(int prot)
    {
        _protMember = prot;
    };

protected:
    int _protMember;
};

class SubTest : public BaseTest
{
    // followup question
    SubTest(const SubTest &subTest)
    {
        _protMember = subTest._protMember; // this line compiles without error
    };

    SubTest(const BaseTest &baseTest)
    {
        _protMember = baseTest._protMember; // this line produces the error
    };
};
Örnek
Derleme hatasını görmek için şöyle yaparız.
SubTest(const SubTest& x);  // can access x._protMember
SubTest(const BaseTest& x);  // cannot access x._protMember
Kurtulmak
Bu kısıttan kurtulmak mümkün
Örnek
Şöyle yaparız.
struct Base { protected: int value; };
struct Derived : Base
{
  void f(Base const& other)
  {
    //int n = other.value; // error: 'int Base::value' is protected within this context
    int n = other.*(&Derived::value); // ok??? why?
    (void) n;
  }
};

Hiç yorum yok:

Yorum Gönder