我有三个不同的班级A
,B
和C
。我是否可以创建一个功能f
,该功能可以访问A
的私人成员,f
仅可以B
(而不是C
)进行调用?
我正在寻找另一种方法,让班级B
成为班级A
的朋友。
答案 0 :(得分:4)
不确定。使有问题的朋友函数作为private
构造函数的参数类,其中B
是唯一的friend
。例如:
#include <iostream>
class A;
class B;
template <typename T>
class Arg {
friend T; // only T can make Arg<T>
};
void foo(A& a, Arg<B> ); // only B can make a Arg<B>
// so foo is only callable by B
class B {
public:
void bar(A& a) { // public for demonstration purposes
foo(a, Arg<B>{}); // but this can just as easily be private
}
};
class A {
friend void foo(A&, Arg<B>); // foo can access A's internals
int x;
public:
void print() { std::cout << x << '\n'; }
};
void foo(A& a, Arg<B> ) { a.x = 42; }
int main() {
A a;
B b;
b.bar(a);
a.print();
}
foo
是friend
A
B
只能由{{1}}使用。
答案 1 :(得分:0)
如果你完全符合朋友的功能,那么是的,你可以限制。这样的事情应该允许B而不是C。
class A
{
private:
int a;
int b;
friend int B::accessInternalsViaFriend();
}
class B
{
.
.
.
public:
int accessInternalsViaFriend();
};