Accessing protected members in a derived class

前端 未结 8 2018
礼貌的吻别
礼貌的吻别 2020-11-22 11:30

I ran into an error yesterday and, while it\'s easy to get around, I wanted to make sure that I\'m understanding C++ right.

I have a base class with a protected memb

8条回答
  •  隐瞒了意图╮
    2020-11-22 11:57

    protected members can be accessed:

    • through this pointer
    • or to the same type protected members even if declared in base
    • or from friend classes, functions

    To solve your case you can use one of last two options.

    Accept Derived in Derived::DoSomething or declare Derived friend to Base:

    class Derived;
    
    class Base
    {
      friend class Derived;
      protected:
        int b;
      public:
        void DoSomething(const Base& that)
        {
          b+=that.b;
        }
    };
    
    class Derived : public Base
    {
      protected:
        int d;
      public:
        void DoSomething(const Base& that)
        {
          b+=that.b;
          d=0;
        }
    };
    

    You may also consider public getters in some cases.

提交回复
热议问题