c++ friend

friend可以修饰友元函数或者友元类。友元主要是为了某些函数或者类能访问某个类的私有变量或函数。
友元函数:在类中使用关键字friend修饰非成员函数,那么在该非成员函数中可以访问这个类中的所有私有的函数和变量
友元类:与友元函数类似
友元的特性:友元关系是单向的,不可传递的,不可继承的。比如class A 是class B的友元类,但如果没有声明class B是class A的友元,那么B不是A的友元。

#include <iostream>

using namespace std;

class A {
public:
     A(int x, int y) {
         x_ = x;
         y_ = y;
     }

     friend int sum(A a); //既然是友元函数,那么这个函数一定不属于这个类 

private:
    void print() {
      cout << "call print()" << endl;
    }

    int x_;
    int y_;

    friend class B;
};


int sum(A a) {
    cout << "sum()" << endl;
    a.print();         //由于是友元函数, 所以可以访问私有函数
    return a.x_ + a.y_;  //由于是友元函数, 所以可以访问私有变量
}

class B {
public:
   B(A* a) { a_ = a; }

   void test() {  //由于B是A的友元类,所以B可以访问A中的私有变量和成员函数
      int result = a_->x_ + a_->y_;
      cout << "result:" << result << endl;
      a_->print();
   }

private:
   A* a_;
};

int main() {
    A a(10, 8);
    cout << "sum:" << sum(a) << endl << endl;

    B b(&a);
    b.test();
}

sum()
call print()
sum:18

result:18
call print()

posted @ 2015-11-18 22:38  牧 天  阅读(167)  评论(0)    收藏  举报