Allowing a “friend” class to access only some private members

前端 未结 7 1819
迷失自我
迷失自我 2020-12-13 12:54

Suppose I have three C++ classes FooA, FooB and FooC.

FooA has an member function named Hello, I want to call this function in class FooB, but I don\'t

相关标签:
7条回答
  • 2020-12-13 13:54

    I think you can use Attorney-Client here.

    In your case example should be like this

    class FooA
    {
    private:
        void Hello();
        void Hello2();
        void Hello3();
        int m_iData;
    
        friend class Client;
    };
    
    class Client
    {
    private:
       static void Hello(FooA& obj)
       {
          obj.Hello();
       }
       static void Hello2(FooA& obj)
       {
          obj.Hello2();
       }
       friend class FooB;
    };
    
    class FooB
    {
        void fun()
        {
            FooA objA;
            Client::Hello(objA);  // right
            Client::Hello2(objA); // right
            //objA.Hello3() // compile error
            //ojbA.m_iData = 0; // compile error
        }
    };
    
    class FooC
    {
        void fun()
        {
            /*FooA objA;
            objA.Hello()  // compile error
            objA.Hello2() // compile error
            objA.Hello3() // compile error
            ojbA.m_iData = 0; // compile error*/
        }
    };
    
    0 讨论(0)
提交回复
热议问题