C++友元

友元

顾名思义:就是让一个函数或者类访问另一类中私有成员
三种方式:
1.全局函数做友元
2.类做友元
3.成员函数的友元

全局函数做友元

#include <iostream>
using namespace std;
class Person
{
    friend void Friend1(Person *p);

public:
    string appearance1;

    Person()
    {
        appearance1 = "我宣你!";
        heart1 = "不知道内心是否还宣你";
    }

private:
    string heart1;
};
// 定义一个全局函数
void Friend1(Person *p) // 注意:此处传入指针,只是为了指向对应Person的值,如果传入引用,那么就可以修改Person里面任意属性值
{
    cout << "Surface" << p->appearance1 << "\n";
    cout << "Heart1" << p->heart1 << "\n";
}
void test()
{
    Person p;
    Friend1(&p);
}
int main()
{
    test();

    return 0;
}

类做友元

内心OS:其实我不太写的惯这种写法

#include<iostream>
using namespace std;
class Building
{
friend class Goodgirl;
public:
    Building();
public:
    string m_sitting;
private:
    string m_Bedroom;
};
class Goodgirl
{
public:
    Goodgirl();
    void visit();
private:
    Building *building;

};

//把构造函数写出来
Building::Building()
{
    m_Bedroom = "bedroom";
    m_sitting = "sittingroom";
}

Goodgirl::Goodgirl()
{
    building = new Building;
}

void Goodgirl::visit()
{
    cout<<"hello"<<building->m_sitting<<"\n";
    cout<<"HEllO"<<building->m_Bedroom<<"\n";
}
void test()
{
    Goodgirl gl;
    gl.visit();
}
int main()
{
    test();
    return 0;
}

成员函数的友元

提要点:
与类函数不同的是,成员函数可以有很多个,但是你需要指定一个成员函数进行friend声明,并且还要写上该成员函数出自哪个类

#include <iostream>
#include <string>
using namespace std;
class Person;
class GoodFriend
{
public:
    GoodFriend();
    void express_love();  // 让express_love可以不走进她的内心
    void express_heart(); // 让express_heart可以访问她的内心
    Person *person;
};
class Person
{
    friend void GoodFriend::express_heart();//需要声明GoodFriend作为本类去访问私有权限
public:
    string appearance1;

private:
    string heart1;

public:
    Person();
};
// 类外实现成员函数
Person::Person()
{
    appearance1 = "我宣你";
    heart1 = "我至今不敢明确我内心";
}

GoodFriend::GoodFriend()
{
    person = new Person;
}
void GoodFriend::express_love()
{
    cout << "你正在倾诉" << person->appearance1 << "\n";
}
void GoodFriend::express_heart()
{
    cout << "你正在倾诉" << person->heart1 << "\n";
}
void test()
{
    GoodFriend gd;
    gd.express_love();
    gd.express_heart();
}
int main()
{
    test();
    return 0;
}
posted @ 2025-03-03 12:17  Alaso_shuang  阅读(22)  评论(0)    收藏  举报
2 3
4