C++:友元

友元是赋予了函数或者类一个访问权限,不是真正的声明

普通友元函数

仅是在类里friend了一个外部函数,并在外部定义实现了它

友元类

在class a1里声明了友元类(friend class a2)不需要再#include“a2.h”, 在class a2里要调用class a1的成员,需要进行#include“a1”

注:不能对两个类所在的头文件相互调用

类的友元成员函数(比较复杂)

  • 先将会被声明为友元的类class a2进行编写,对它的内部函数(会被声明为类的友元成员函数)进行声明,不定义,注意需要对class a1;进行声明可能会在该内部函数声明中使用
  • 将class a1进行编写,因为要声明类的友元成员函数,需要#include"a2" 在类里 friend class::func();
  • 由于不能相互调用,所以在class a2.cpp中进行#include"a1.h", 在对各个a2类中的成员函数进行定义

详情点击这里

补充:
若是本身想调用自己的友元函数,一定要记住友元函数的声明只是一个赋予权限的过程,并非真正的声明
所以想在本身中调用,必须先真正声明该友元

互为友元类:

#include<iostream>
using namespace std;

class People;

class Birth{
    public:
        friend class People;
//      Birth() = default;
//      ~Birth() { }
        void getage(People &A);
    private:
        int year = 2019;
        int month = 9;
        int day = 10;
};

class People{
    public:
        friend class Birth;
//      People()=default;
//      ~People(){ }
        void getyear(Birth b)
        {
            cout << b.year << endl;
        }
    private:
        int age = 12;
        char sex = 'M';
}; 

void Birth::getage(People &A){
    cout << A.age << endl;
}

int main()
{
    Birth b;
    People p;
    b.getage(p);
    p.getyear(b);
    return 0;
}

转载于:https://www.cnblogs.com/Liberavi/p/11568484.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值