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 }
  • 相关阅读:
    2.8 Classes of Restricted Estimators
    navicat远程登录windows服务器
    面试题
    【南阳OJ分类之语言入门】80题题目+AC代码汇总
    基于‘BOSS直聘招聘信息’分析企业到底需要什么样的PHPer
    数据开源
    Pyhton爬虫实战
    Python爬虫框架Scrapy实战
    做网站用UTF-8编码还是GB2312编码?
    【南阳OJ分类之大数问题】题目+AC代码汇总
  • 原文地址:https://www.cnblogs.com/jiu0821/p/5248707.html
Copyright © 2011-2022 走看看