正经的c++面向对象技巧——如何方便的只对特定类暴露特定接口

本文探讨了在C++中如何实现面向对象设计,以确保类A能访问特定接口,而类B不能。文章通过三种方法进行讲解,包括使用保护成员、基类控制等策略,旨在提供一种安全地对特定类暴露接口的方法。
摘要由CSDN通过智能技术生成

//目标:在AB获得的对象为同一个的时候,只对A暴露imple的todo接口

 

方法1: 稍显麻烦

class Imple;

class AReference
{
    void todo (Imple&);
};


class BReference
{
    void todo (Imple&);
};

class Imple
{
    //禁止外部获取
    class FriendForA
    {
        friend AReference;
        friend Imple;
        Imple& parent;
        void todo()
        {
            parent.todo ();
        }
        FriendForA (Imple& parent) : parent (parent) {}
    };
    friend FriendForA;

    void todo();
public:
    FriendForA application()
    {
        return *this;
    }
};

void AReference::todo (Imple& im)
{
    //成功
    im.application ().todo ();
    //错误
    im.todo ();
}

void BReference::todo (Imple& im)
{
    //错误
    im.application ().todo ();
    //错误
    im.todo ();
}

方法2:强制为保护,且无法制止B用同样的方式获得接口

class Imple;

class AReference
{
    class ImpleForA;
    void todo (Imple&);
};


class BReference
{
    void todo
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值