最近在写代码,碰到一个问题,就是我定义的一个类,这个类的初始数据想要用到另外两个类的私有数据,但是提示inaccessible,已经在另外两个类中规定了本类为友元类。详情见图,tPoint就是我定义的一个类,task1和p1是另外两个类的对象。还有一个问题,友元类是只能让成员函数去访问其他类的数据?不能够让其他类的数据相加减作为本类的初始数据?
你的 tPoint P11
中间应该是.
吧。
而且 tPoint 应该是变量,怎么是“类”呢?
class A
{
private:
int a;
friend class C;
};
class B
{
private:
int b;
friend class C;
};
class C
{
public:
C(A a, B b ) { c = a.a + b.b;} ; // OK
friend class A;
friend class B;
private:
int c;
};
C t1(a.a + b.b ); // fail
友元类,只是让这个类中的函数可以访问这个类的私有变量。
初始化参数列表的加减操作如果也需要访问私有变量,那这些操作也需要设置为类的友元函数。
可以通过一个方法返回那个私有成员,,,例如这样:
#include
using namespace std;
class B;
class A
{
friend class B;
private:
int a;
int geta() //私有的
{
return a;
}
public:
A()
{
a=10;
}
};
class B
{
A aa;
public:
int getA()
{
return aa.geta(); //调用类A的私有方法
}
};
int main()
{
B b;
cout<<b.getA()<<endl;
return 0;
}
class A
{
public:
friend class C;
private:
int a;
};
class B
{
public:
friend class C;
private:
int b;
};
class C
{
public:
C(int a) { c = a ; }
C(A a, B b ) { c = a.a + b.b;} // OK
private:
int c;
};
A a;
B b;
C t1(a.a + b.b ); // fail