友元
时间久了,这些东西都遗忘了。友元打破了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 }