C++ 使基类函数对客户端不可见

C++ 使基类函数对客户端不可见,c++,derived-class,C++,Derived Class,我想使基类中的所有函数对客户端不可见,只能通过派生类访问 在C++中有没有办法做到这一点? 谢谢 有两种方法,一种是 使用受保护的关键字 class A{ protected: void f(){ std::cout << "F" << std::endl;s } }; class B:public A{ // access f() here... }; 使用访问说明符(如果基类不在您的控制之下):

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

在C++中有没有办法做到这一点?


谢谢

有两种方法,一种是

使用受保护的关键字

class A{
    protected:
        void f(){
            std::cout << "F" << std::endl;s
        }
};
class B:public A{
    // access f() here...
};
使用访问说明符(如果基类不在您的控制之下):


你熟悉受保护的关键字吗?使它们
受保护
。您所说的
client
是指基类的对象吗?不清楚。你所说的“无形”和“客户”是什么意思?公共继承是一种契约。你不允许违背合同,快去吧。它会告诉你一切。需要一个
B
的转发声明,才能将
a
转发给
friend
它。@user4581301我不这么认为,我已经测试过了。你能解释一下为什么需要吗?我很抱歉。跳枪。相同的命名空间异常。
#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;
}
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
}