C++第04课 友元

时间:2021-09-05
本文章向大家介绍C++第04课 友元,主要包括C++第04课 友元使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

1.友元

friend关键字,友元赋予对象具有打破权限限定的一个功能,并不是能够直接访问类中数据

2.友元函数

在类中用friend修饰的函数 称之为友元

在友元函数中 的对象具有打破权限限定,以一个对象为参数或者在当前函数中定义的对象,友元函数不属于类,所以不受权限限定

+ 普通函数是友元函数

class Girl {
    friend void print(Girl obj);
    friend Girl* returnObj();
public:
    string name;
protected:
    int age;
private:
    int money;
};
//友元函数不属于类,在类外实现时不需要类名限定
void print(Girl obj)
{
    obj.age = 19;
    obj.money = 19999;
    obj.name = "ILoveYou";
}
Girl* returnObj()
{
    Girl* p = new Girl;
    p->name = "小可爱";
    p->money = 10000;
    p->age = 18;
    return p;
}
int main()
{
    Girl g;
    g.name = "hello";
    //脱离了友元函数就受权限限定,打破权限仅限在友元函数中    
    cout << returnObj()->name << endl;
    //无法访问
    //g.age = 12;
    //g.money = 1230;
    return 0;
}

+ 另一个类型的成员函数是友元函数

MM类中有一个友元函数是GG类的成员函数叫做print(MM obj)

声明MM类型: class MM

GG类定义: class GG{ .... }

MM类定义 class MM{ .... }

Bf函数的实现 GG::print(MM obj){}

//固定写法
class MM;
class GG {
public:
    string name;
    void print(MM obj);
protected:
    void print()
    {
        cout << name << endl;
    }
};
class MM {
    friend void GG::print(MM obj);
public:
    string name;
protected:
    void print()
    {
        cout << name << endl;
    }
};

3.友元类

在A类中声明B类为友元类,B类中所有A类的对象都具有无视权限限定的一个功能。

class A {
    friend class B;
public:
    A(int a):a(a){}
protected:
    int a;
private:
    void print() {
        cout << a << endl;
    }
};
class B {
public:
    void print(A obj)
    {
        cout << obj.a << endl;
        obj.print();
    }
protected:
    int b;
private:
    void print() {
        cout << b << endl;
    }
};

原文地址:https://www.cnblogs.com/creature-lurk/p/15230758.html