如何将类的公共接口的一部分限制为只有一个类?

时间:2011-06-30 14:37:03

标签: c++ oop accessibility

以下是界面:

class SIM{
private:
//private data

public:
Send();
Display();
Recieve();
Encrypt();
};

如何限制Display() public部分SIM部分的Neo部分对其他类(friend等除外)的访问权限。我不想使用{{1}}等。

修改

我可以将display()移动到私有,如何只允许NEO类访问它? 0_o

5 个答案:

答案 0 :(得分:3)

您可以Display对一个类型进行虚拟const引用,该类型只能通过您希望能够进行调用的类中的私有嵌套来创建。然后,为了将该类型传递给Display,您必须是该类的成员。

但是,当friend完全符合您的要求时,为什么会这样做呢?

代码示例:

class AllowedCaller
{
private:
    class FriendHackHelp
    {
    };

public:
    class FriendHack
    {
    public:
        // You can only create a FriendHack from inside this class now...
        FriendHack(const FriendHackHelp&) { }
    };

    void run();
};

class Displayer
{
public:
    void Display(const AllowedCaller::FriendHack&) { /* Whatever */ }
};

void AllowedCaller::run()
{
    Displayer d;
    d.Display(FriendHack(FriendHackHelp()));
}

int main()
{
    return 0;
}

答案 1 :(得分:2)

在C ++中,这根本不可能。你可以做的是将Neo类作为参数传递给Display()函数作为参考,你会产生类似的效果。

答案 2 :(得分:0)

您还可以将SIM类拆分为2类:可显示(使用显示方法)和SIM(使用其余方法)。然后,在创建Neo类时,只需不要扩展Displayable类。

答案 3 :(得分:0)

让我问你一个问题:neo究竟是什么?它能够从SIM继承吗?如果是这样,请创建Display()protected而不是private

答案 4 :(得分:0)

过去我一直在想这个,请检查以下问题:

programming language with granular method and property access

a way in c++ to hide a specific function

然而,我认为实现这一点的唯一方法(至少在c ++中)是为每个客户端类创建多个接口,并使每个接口成为将访问它的客户端类的朋友。

因此您需要实现具有多重继承的所有和每个接口