Protected member function address in derived class is not accessible

后端 未结 3 1486
故里飘歌
故里飘歌 2021-01-11 21:38
#include 

class A {
protected:
    void foo()
    {}
};

class B : public A {
public:
    void bar()
    {
       std::cout << (&A::foo) &         


        
3条回答
  •  春和景丽
    2021-01-11 22:14

    I was curious and tried the following example:

    #include 
    using namespace std;
    
    class A {
    public:
        void foo()
        {
        }
    };
    
    class B : public A {
    public:
        void bar()
        {
           printf("%p\n", (&A::foo));
           printf("%p\n", (&B::foo));
        }
    };
    
    int main()
    {
        B b;
        b.bar();
    }
    

    Actually, I see that &A::foo == &B::foo, so for protected member of base class you can use derived class member to take address. I suppose in case of virtual functions this will not work

提交回复
热议问题