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

如题所述

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

友元类:

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

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

温馨提示:内容为网友见解,仅供参考
第1个回答  2019-09-22

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流库。

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

本回答被网友采纳
第2个回答  推荐于2017-09-14

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

设定类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;
};

第3个回答  推荐于2017-09-01
如果类A把类B声明为自己的友元类,那么在类B中的所有函数中都可以访问类A的私用和保护成员。

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

如果类A把类B的某个函数声明为自己的友元函数,那么在这个函数中都可以访问类A的私用和保护成员。本回答被提问者采纳
第4个回答  2015-09-22
可以的 但是你定义 友元(friend)
1,,比如你要在B类中访问A类的私有成员
2,那就在B类中定义A类的友元函数
3,这就可以直接访问了
相似回答