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()

浙公网安备 33010602011771号