使基类功能对客户端不可见

时间:2016-06-07 07:19:22

标签: c++ derived-class

我想让我的基类中的所有函数对我的客户端不可见,只能通过我的派生类访问。

有没有办法在C ++中执行此操作?

谢谢!

2 个答案:

答案 0 :(得分:0)

有两种方式

使用受保护的关键字

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

任何派生类都可以从A类访问f()函数。

第二种方式: 制作A级的B级朋友类。

#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;
}

答案 1 :(得分:0)

使用access-specifier(如果基类不在您的控制之下):

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
}