zoukankan      html  css  js  c++  java
  • 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,友元类或者友元函数并不增加类的大小,只是声明一下。
  • 相关阅读:
    Web server failed to start. Port 8080 was already in use.
    org.springframework.context.ApplicationContextException: Unable to start web server; nested exception is org.springframework.context.ApplicationContextException: Unable to start ServletWebServerApplic
    HttpClient测试框架
    Mock接口平台Moco学习
    自动化测试框架TestNG
    css常用记录...个人查看使用
    常用JS工具类 .....持续更新中 ...CV大法好
    element-upload覆盖默认行为(多个文件上传调用一次接口)
    基础术语理解
    MVC和MVVM设计模式简单理解
  • 原文地址:https://www.cnblogs.com/timssd/p/4781110.html
Copyright © 2011-2022 走看看