zoukankan      html  css  js  c++  java
  • 友元

    时间久了,这些东西都遗忘了。友元打破了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 }
  • 相关阅读:
    Android的消息机制
    AndroidVolley框架的使用
    Android事件分发机制浅谈(三)源码分析(View篇)
    Java 编程下简介 Class 与类加载
    [ZJOI2007]最大半连通子图
    [HNOI2012]永无乡
    [HEOI2016/TJOI2016]排序
    CSS 条件缩放图片
    CSS图片垂直居中
    最近写 ASP.NET 中出现的错误 & 实现DataTable和DataSet类型的客户端/服务器端自动转换
  • 原文地址:https://www.cnblogs.com/jiu0821/p/5248707.html
Copyright © 2011-2022 走看看