C++学习笔记9----friend fuction(友元函数)

  1. 现实生活中场景: 比如QQ空间的相册,我建立了一个私密相册,基本QQ好友都不可见,但是我的私密好友,比如家中女神“老婆”可以访问。如何做到这种越权访问呢?就需要用到友元了,让外部的函数也可以访问我私密类内部的成员。
  2. 友元函数的作用: 就是让类外的函数,例如:全局函数,可以访问类内的私有成员变量。
  3. 下面举个例子来实现友元函数:
#include 
class Person {

	//将全局函数的声明放置到类内,并在其前面加上friend关键字
    friend void print(const Person &p);
    //友元类
	friend class Father;
public:
    Person():m_age(0){};

    Person& add(int a){
        m_age = m_age + a;
        return *this;
    }

private:
    void print() {
        std::cout << "age = " << m_age << std::endl;
    }

private:
    int m_age;
};

//虽然我是Person类外的一个函数,但是我的权限大,我要访问你的私有成员m_age
//friend void print(const Person &p);
void print(const Person &p) {
    std::cout << "age = " << p.m_age << std::endl;
}

class Father {

public:

    void print(Person &p) {
    	//friend class Father;
    	//因为是你爸,所以可以可以调用你的private print()
        p.print();
    }

private:
    Person *p;
};

int main() {
    Person p;
    p.add(1).add(2).add(3);
    print(p);
    Father f;
    f.print(p);
    return 0;
}

4. 注意事项:

  • 友元关系不能被继承。
  • 友元关系是单向的。 类A是类B的朋友,但类B不一定是类A的朋友。
  • 友元关系是不具有传递性的。 类A是类B的朋友,类B是类C的朋友,但是类A不一定是类C的朋友。

你可能感兴趣的:(C/C++)