簡體   English   中英

重寫是另一個類的朋友的虛擬受保護方法

[英]Override virtual protected method that is a friend of another class

基本上,我想以某種方式模擬友誼繼承,使其只能在某種方法內部發生限制。

所以本質上,這就是我想要的

class A; // Forward declaration
class Base{
   friend class A; // friend declaration so that A is able to see protected methods

   protected:
   virtual void method() {// some definition, might also be pure virtual}

}

class Derived : public Base{
     A aObj;
     void method(){//override the one in base and also gain access to aObj private members.}
     public:
     //public interface
} 


class A {
    int var;
    friend void Base::method(); 
    public:
      // public interface
}

反正有實現這一目標的方法嗎?

這個怎么樣

class Base {
   friend class A; 
   protected:
   virtual void method() = 0;
   std::tuple<int> GetAProperties(const A& a) {     
        // You can change the tuple params
        // as per your requirement.
        return std::make_tuple(a.var);
   }
}

class Derived : public Base {
    A aObj;
    void method() override {
        auto objProperties = GetAProperties(aObj);
    }
}

您可以在Base獲得指向private的A成員的指針,然后將這些成員指針傳遞給Derived

class A; // Forward declaration
class Base{
   friend class A; // friend declaration so that A is able to see protected methods

   private:
   void method(A&);
   virtual void do_method(A& a,int A::* var) {// some definition, might also be pure virtual
     (a.*var)++;
   }

};
class A{
    int var;
    friend void Base::method(A&);
};
class Derived : public Base{
     A aObj;
     virtual void do_method(A& a,int A::* var) {// some definition, might also be pure virtual
     a.*var+=2;
   }
     public:
     //public interface
};

void Base::method(A& a){
       do_method(a,&A::var);
   }

注意:不要在關鍵關卡上使用它!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM