-1

I want to make all functions in my base class invisible to my client, only accessible through my derived class.

Is there a way to do this in C++?

Thanks!

user3019579
  • 71
  • 10

2 Answers2

0

There are two ways one is

Using Protected Keyword

class A{
    protected:
        void f(){
            std::cout << "F" << std::endl;s
        }
};
class B:public A{
    // access f() here...
};

Any derived class can access f() function from A class.

Second way: Making B class friend class of A.

#include <iostream>
class A{
    private:
        void f(){
            std::cout << "F" << std::endl;
        }
    friend class B;
};

class B:public A{
    A obj;
    public:
        void accessF(){
            obj.f();
        }
};
int main(){
    B obj;
    obj.accessF();

    return 0;
}
Asif Mushtaq
  • 3,658
  • 4
  • 44
  • 80
0

Use access-specifier (if base class is not under your control):

class A
{  public:
    void f() {}
    void h() {}
};
class B: private A  // all members of A are private
{ public:
    void g()
    { f();
    }
    using A::h;     // adjust access
};

int main()
{ A a;
  a.f();
  B b;
  b.g();
  b.h();
  b.f();  // error: 'void A::f()' is inaccessible
}
Roland
  • 336
  • 2
  • 8