友元

时间久了,这些东西都遗忘了。友元打破了c++的类封装和隐蔽,感觉有些偏门左道,用好了能够发挥奇效,用不好嘛,就是误入歧途。个人不太喜欢,不过还是总结一下,以备无虞。

 

友元函数:它就是个奇葩的普通函数,能够访问对应类的任何成员,却跟类成员函数没半点关系。个人较喜欢类内声明,类外定义,至于语法细节,看下面实例。

 1 #include <iostream>
 2 using namespace std;
 3 
 4 class A {
 5 private:
 6     int a, b, c;
 7     void show() {
 8         cout << a*b*c << endl;
 9     }
10 public:
11     A(int a = 1, int b = 2, int c = 3) :a(a), b(b), c(c) {}
12     friend void lvh(A &x);
13 };
14 
15 int main() {
16     A x(3,4,5);
17     lvh(x);
18     return 0;
19 }
20 void lvh(A &x) {
21     cout << x.a + x.b + x.c << endl;
22     x.show();
23 }

友元类:将一个类声明为另一个类的友元类,则前者的所有成员函数都将是后者的友元函数。另外,声明前者为后者友元类时,前者必须已存在或已被声明。可以对类使用前向引用声明,见下面代码。

 1 #include <iostream>
 2 using namespace std;
 3 
 4 class B;//前向引用声明
 5 class A {
 6 private:
 7     int a, b, c;
 8     void show() {
 9         cout << a*b*c << endl;
10     }
11 public:
12     A(int a = 1, int b = 2, int c = 3) :a(a), b(b), c(c) {}
13     friend class B;
14 };
15 class B {
16 public:
17     void showA(A &x) {
18         cout << x.a + x.b + x.c << endl;
19         x.show();
20     }
21 };
22 
23 int main() {
24     A x(3,4,5);
25     B t;
26     t.showA(x);
27     return 0;
28 }

 

posted @ 2016-03-06 21:45  jiu~  阅读(223)  评论(0编辑  收藏  举报