全局函数做友元

#include<iostream>
#include<string>
using namespace std;

class Home {
    friend void DoMake(Home & p);  //声明一个友元函数,可以传值也可以传址,但上下要一致
public:
    string HomeWorkRoom;
private:
    string MyRoom;

public:
    Home() {
        HomeWorkRoom = "工作室";
        MyRoom = "卧室";

    };

    void DoWork() {
        cout << "你的基友正在访问:" << HomeWorkRoom << endl;

    };



};

//声明一个全局函数,传入一个Home类型的地址
void DoMake(Home & p) {
    cout << "你的女友正在访问:" << p.MyRoom << endl;
    cout << "你的女友正在访问:" << p.HomeWorkRoom << endl;
}
int main() {
    Home h;
    h.DoWork(); //正常输出
    //h.GoRoom(); //是不可访问的 ,因为GoRoom是私有函数
    DoMake(h);// 因为你在类里面声明了友元函数DoMake,所以这个函数可以访问Home里的私有成员

}

友元类

#include<iostream>
#include<string>
using namespace std;

class building;
class goodguy {

public:
    goodguy();   //类内声明一个构造函数,但是不实现它
    void show(); //类内声明一个show函数,类外实现,用来访问所有成员
private:
    building* build;  //goodguy类内创建一个building类的指针
};

class building {
    friend class goodguy;
public:
    building();  //构造函数空实现,类外再实现
    string HomeRoom;  //客厅
private:
    string MyRoom; //私人房间
};
//类外来实现类内声明的构造函数,需要先写明作用域
goodguy::goodguy() {
    build = new building;
}

building::building() {
    HomeRoom = "客厅";
    MyRoom = "私人房间";
}

void goodguy::show() {
    cout << "你的好基友正在访问:" << build->HomeRoom << endl;
    cout << "你的好基友正在访问:" << build->MyRoom << endl; //这里需要声明过友元才可以访问
}

void test1() {
    goodguy gg;
    gg.show();
}
int main() {
    test1();

}

成员函数做友元函数

#include<iostream>
#include<string>
using namespace std;

class building;
class goodguy {

public:
    goodguy();   //类内声明一个构造函数,但是不实现它
    void show(); //类内声明一个show函数,类外实现,用来访问所有成员
private:
    building* build;  //goodguy类内创建一个building类的指针
};

class building {
    friend class goodguy;   //设置友元类
    friend void goodguy::show();   //设置友元函数 本代码段取其一都可以运行
public:
    building();  //构造函数空实现,类外再实现
    string HomeRoom;  //客厅
private:
    string MyRoom; //私人房间
};
//类外来实现类内声明的构造函数,需要先写明作用域
goodguy::goodguy() {
    build = new building;
}


building::building() {
    HomeRoom = "客厅";
    MyRoom = "私人房间";
}

void goodguy::show() {
    cout << "你的好基友正在访问:" << build->HomeRoom << endl;
    cout << "你的好基友正在访问:" << build->MyRoom << endl; //这里需要声明过友元才可以访问
}

void test1() {
    goodguy gg;
    gg.show();
}
int main() {
    test1();

}

最后修改:2022 年 12 月 05 日
如果觉得我的文章对你有用,请随意赞赏