c++友元函数

目录

友元函数的基本概念

友元语法

全局函数成为类的友元

类成为另一个类的友元


友元函数的基本概念

百度百科icon-default.png?t=N7T8https://baike.baidu.com/item/%E5%8F%8B%E5%85%83%E5%87%BD%E6%95%B0/9569177类的主要特点之一是数据隐藏,即类的私有成员无法在类的外部(作用域之外)访问。但是,有时候需要在类的外部访问类的私有成员,怎么办?

解决方法是使用友元函数,友元函数是一种特权函数,c++允许这个特权函数访问私有成员。这一点从现实生活中也可以很好的理解:

比如你的家,有客厅,有你的卧室,那么你的客厅是 Public 的,所有来的客人都可以进去,但是你的卧室是私有的,也就是说只有你能进去,但是呢,你也可以允许你的闺蜜好基友进去。

友元语法

friend关键字只出现在声明处,其他类、类成员函数、全局函数都可声明为友元,友元函数不是类的成员,不带 this 指针。友元函数可访问对象任意成员属性,包括私有属性

注意
-1 .友元关系不能被继承。
2 .友元关系是单向的,类 A 是类 B 的朋友,但类 B 不一定是类 A 的朋友。
3 .友元关系不具有传递性。类 B 是类 A 的朋友,类 C 是类 B 的朋友,但类 C 不一定是类 A 的朋友。

全局函数成为类的友元

#include 
#include 

using namespace std;

class house
{

    friend void printf_house(house &p);//声明为友元
    public:
        house(string kitchen,string bedroom)
        {
            this->kitchen = kitchen;
            this->bedroom= bedroom;
        }
        string kitchen;

    private:
        string bedroom;
};

void printf_house(house &p)
{
    cout << p.kitchen << " " << p.bedroom << endl;
}

int main()
{
    house p1("厨房","卧室");
    printf_house(p1);
    return 0;
}

类成为另一个类的友元

#include 
#include 

using namespace std;

class house;

class friend_function
{
    public:
        friend_function(string kitchen,string bedroom);
        void printf_friend_function();
        house*b;
};

class house
{
    //friend class friend_function;//友元声明
    friend void friend_function::printf_friend_function();//将某个函数设置为友元 此函数可以从访问该类私有
    public:
        house(string kitchen,string bedroom)
        {
            this->kitchen = kitchen;
            this->bedroom= bedroom;
        }
        string kitchen;

    private:
        string bedroom;
};

friend_function::friend_function(string kitchen,string bedroom)
{
    b = new house(kitchen,bedroom);
}


void friend_function::printf_friend_function()
{
    cout << b->kitchen << " " << b->bedroom << endl;
}

void test01()
{
    friend_function ff("厨房","卧室");
    ff.printf_friend_function();
}

int main()
{
    test01();
    return 0;
}

你可能感兴趣的:(c++,开发语言)