c++中可不可以在一个类中访问另一个类的私有成员?

 我来答
博学小赵爱生活
高能答主

2019-08-04 · 专注于食品生活科技行业
博学小赵爱生活
采纳数:456 获赞数:111888

向TA提问 私信TA
展开全部

可以,只要定义该类为另一个类的友元类即可。

友元类:

class A

{

friend class B

private:    int aa;

};

class B

{

public:    

void output()    

{

cout << a.aa << endl;

}

private:    A a;

}

使用友元类时:

(1) 友元关系不能被继承。

(2) 友元关系是单向的,不具有交换性。若类B是类A的友元,类A不一定是类B的友元,要看在类中是否有相应的声明。

(3) 友元关系不具有传递性。若类B是类A的友元,类C是B的友元,类C不一定是类A的友元,同样要看类中是否有相应的申明。

扩展资料:

友元类使用注意事项:

1、友元可以访问类的私有成员。

2、只能出现在类定义内部,友元声明可以在类中的任何地方,一般放在类定义的开始或结尾。

3、友元可以是普通的非成员函数,或前面定义的其他类的成员函数,或整个类。

4、类必须将重载函数集中每一个希望设为友元的函数都声明为友元。

5、友元关系不能继承,基类的友元对派生类的成员没有特殊的访问权限。如果基类被授予友元关系,则只有基类具有特殊的访问权限。该基类的派生类不能访问授予友元关系的类。

参考资料来源:百度百科-友元类

帐号已注销
2019-09-22 · TA获得超过25.9万个赞
知道小有建树答主
回答量:2206
采纳率:96%
帮助的人:82.3万
展开全部

c++中可以在一个类中访问另一个类的私有成员,通过定义友元类即可实现。

class node

{

public:

node(int data = 0) :mdata(data), mpnext(NULL){}

private:

int mdata;

node *mpnext;

friend class link;

};

友元类本质:

C++提高破坏数据封装和隐藏的一种机制,将一个类A声明为另一个类B的友元类,这样B就可以使用A的私有数据。

一般,为了保证数据的完整性,以及数据的封装和隐藏原则,建议不用友元。

友元类的特点:友元是单一的,不能传递

扩展资料

友元(frend)机制允许一个类将对其非公有成员的访问权授予指定的函数或者类,友元的声明以friend开始,它只能出现在类定义的内部,友元声明可以出现在类中的任何地方。

友元不是授予友元关系的那个类的成员,所以它们不受其声明出现部分的访问控制影响。通常,将友元声明成组地放在类定义的开始或结尾是个好主意。

使用友元类优点:

1、可以灵活地实现需要访问若干类的私有或受保护的成员才能完成的任务;

2、便于与其他不支持类概念的语言(如C语言、汇编等)进行混合编程;

3、通过使用友元函数重载可以更自然地使用C++语言的IO流库。

参考资料来源:百度百科—友元类

本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
风若远去何人留
推荐于2017-09-14 · 知道合伙人互联网行家
风若远去何人留
知道合伙人互联网行家
采纳数:20412 获赞数:450133
专业C/C++软件开发

向TA提问 私信TA
展开全部

可以,只要定义该类为另一个类的友元类即可。

设定类A带有私有的整型元素a:

class A
{
    private:
        int a;
};

同时存在类B,访问A中的a元素。

class B
{
    void setA(A &a, int v)
    {
        a.a = v;
    }
};

这时进行编译会出错,因为B无法访问A的私有元素,要解决这个问题,需要声明B为A的友元类,方法为在A的定义中添加友元类声明。具体如下:

class A
{
    private:
        int a;
    friend class B;
};
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Eli2021
推荐于2017-09-01 · TA获得超过664个赞
知道小有建树答主
回答量:1266
采纳率:72%
帮助的人:341万
展开全部
如果类A把类B声明为自己的友元类,那么在类B中的所有函数中都可以访问类A的私用和保护成员。

如果类A把类B的某个成员函数声明为自己的友元函数,那么在类B中的这个函数中都可以访问类A的私用和保护成员,其它函数不可以访问。

如果类A把类B的某个函数声明为自己的友元函数,那么在这个函数中都可以访问类A的私用和保护成员。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
爱你在那年冬季
2015-09-22 · 超过13用户采纳过TA的回答
知道答主
回答量:45
采纳率:0%
帮助的人:14.3万
展开全部
可以的 但是你定义 友元(friend)
1,,比如你要在B类中访问A类的私有成员
2,那就在B类中定义A类的友元函数
3,这就可以直接访问了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(11)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式