友元类问题
#include <iostream>
2
3 using namespace std;
4
5 class PA;
6
7 class A
8 {
9 public:
10 A(void)
11 {
12 cout << "A()" << endl;
13 }
14
15 ~A(void)
16 {
17 cout << "~A()" << endl;
18 }
19
20 void foo(void)
21 {
22 cout << m_a << endl;
23 }
24
25 friend class PA;
26
27 private:
28 int m_a;
29 };
30
31 class PA
32 {
33 public:
34 PA(A* p) : m_p(p) {}
35
36 ~PA(void)
37 {
38 if (m_p)
39 {
40 delete m_p;
41 m_p = NULL;
}
43 }
44
45 A& operator* (void)
46 {
47 return *m_p;
48 }
49
50 A* operator-> (void)
51 {
52 return m_p;
53 }
54
55 private:
56 A* m_p;
57 };
58
59 int main(void)
60 {
61 PA pa(new A);
62 (*pa).m_a = 10;
63 pa->foo();
64 }
65
这个程序是关于智能指针的。我想使用类PA的对象访问类A的私有成员m_a,就在类A中声明了友元类friend class PA,但编译器直接给我报错,说m_a是类A的私有成员,类PA的对象不能直接访问m_a。请问各位大神,在m_a是类A的私有成员的前提下,怎么使用友元类?
[解决办法]
(*pa).m_a = 10;
A& operator* (void)
{
return *m_p;
}
59 int main(void)
60 {
61 PA pa(new A);
62 (*pa).m_a = 10;//这是在main函数的作用域,访问A类的 m_a,所以这个成员,必须是public
63 pa->foo(); //这个foo(),也是必须 public
64 }