类的友元函数、友元类

友元函数、友元类

“友元”是独立的,与类之间不存在包含关系。通过“友元”的声明,可以访问类中的任何成员

友元函数

友元函数不是这个类中的成员函数只是一个普通的小可爱:在类体外声明、在类体外实现,跟普通的函数完全一样,不过需要在类体内“登记”一下,表示这个函数有权限访问类体内的所有成员。登记的格式是:
friend 函数(参数);

class Date{
private:
    int y,m,d;
public:
    Date(){
        y=1314,m=5,d=21;
    }
    //友元函数登记:
    friend void Print(Date a);
    friend void changeY(int Y,Date &a);
    friend int getM(Date a);
    //注意这里登记的函数必须和下面的函数一模一样
    //即参数个数、类型、名字都必须完全相同
};
void Print(Date a){
    cout<<a.y<<" "<<a.m<<" "<<a.d<<endl;
}
void changeY(int Y,Date &a){
    a.y=Y;
}
int getM(Date a){
    return a.m;
}
int main( )
{
    Date d0;
    Print(d0);//像普通函数一样调用
    changeY(1413,d0);
    Print(d0);
    cout<<getM(d0);
    return 0;
}

输出:

1314 5 21
1413 5 21
5

友元函数的参数一般包括相应类的对象,比如上述三个友元函数里的Date a不然没对象光有权限有啥用哈哈哈哈哈

把友元函数当成普通函数用就可以,像普通函数一样定义、一样描述、一样调用,只是多了一个“登记”的步骤。

友元类

一个类作为另一个类的友元,则这个类中所有成员函数都是另一个类的友元函数。“登记”格式:friend class 类名;

class Date{
private:
    int y,m,d;
public:
    Date(){//打酱油的构造函数
        y=1314,m=5,d=21;
    }
    friend class Print;//友元类登记
};
class Print{
public:
//Print类的成员函数都是Date类的友元函数
    void printY(Date p){
        cout<<p.y;//有访问私有成员y的权限
    }
};
int main( )
{
    Date p;
    Print p0;
    p0.printY(p);
    return 0;
}

输出:

1314

本人是在读大学生,系列教程主要为了便于我的同学们参考,其中可能有很多不妥之处,望各位大佬雅正。
公众号:网织青春zcwlgc2019

猜你喜欢

转载自blog.csdn.net/pyx2466079565/article/details/106174208