c friend -- 友元

c friend -- 友元

友元用于突破protected 或者 private 保护的限制,首先要做的是在被访问者的类中声明是友元函数或者友元类。代码如下

  1. #include <iostream>
  2. using namespace std;
  3. class Square{
  4.         private:
  5.                 int side;
  6.         public:
  7.                 Square(int a):side(a){}
  8.         friend class Rectangle ; //declare the Class is friend
  9. };
  10. class Rectangle {
  11.         private:
  12.                 int width, height;
  13.         public:
  14.                 Rectangle(int a, int b):width(a),height(b){}
  15.                 void set_values (int a, int b){
  16.                         width = a;
  17.                         height = b;
  18.                 }
  19.                 int girth();
  20.                 friend int area (Rectangle &); //declare the friend function here
  21.                 int get_width(){return width;}
  22.                 int get_height(){return height;}
  23.                 void conver_from_square(Square &s){
  24.                         width = height = s.side; //access so easily
  25.                 }
  26. };
  27. //implement the function here , access easily ,too
  28. int area (Rectangle &r){ return ( r.width * r.height); }
  29. int r_area(Rectangle &r){ return r.get_width() * r.get_height();}
  30. int Rectangle::girth(){return width + width + height + height; }
  31. int main () {
  32. test_sizeof:
  33.         cout << "sizeof: Square " << sizeof(Square)
  34.              << ", Rectangle " << sizeof(Rectangle) << " " ;
  35. test_access:
  36.         Rectangle r(2,3);
  37.         cout << "area:" << area(r) << " girth:" << r.girth() << endl;
  38.         cout << "onather way:area " << r_area(r) << endl;
  39.         Rectangle r1(2,3);
  40.         Square s(5);
  41.         r1.conver_from_square(s);
  42.         cout << "rectangle convering from square , girth is " << r1.girth() << endl;
  43.         return 0;
  44. }
结果
  1. sizeof: Square 4, Rectangle 8
  2. area:6 girth:10
  3. onather way:area 6
  4. rectangle convering from square , girth is 20
看函数
  • area
  • r_area
  • girth
如果不是友元函数或类,访问情况如 r_area()函数,友元函数就可以直接访问成员。但是和成员函数比起来还是要有区别的,看函数girth()
 
看看size,友元类或者友元函数并不增加类的大小,只是声明一下。
原文地址:https://www.cnblogs.com/timssd/p/4781110.html