首页 > 其他 > 详细

友元函数

时间:2020-04-08 16:31:04      阅读:39      评论:0      收藏:0      [点我收藏+]

友元函数

友元函数在类里面声明,但是他更相当于一个全局函数

在类里public或者private 或者protected里面定义没有影响

友元函数可以在类外面访问类的私有变量

 

举个栗子

看一下使用方法

class Test
{
private:
        int private_i;
        friend int read_priv(Test &t,int i);    //友元函数声明
public:
        Test(int i);
};

Test::Test(int i)
{
        this->private_i = i;
}

//友元函数定义
int read_priv(Test &t,int i)
{
        t.private_i += i;       //修改私有变量
        return t.private_i;
}

int main(int argc, char const *argv[])
{
        Test test1(1);
        cout<<read_priv(test1,5)<<endl;
}

声明友元函数:在函数前面加一个 friend 关键字,其余部分和普通函数一样

定义友元函数:完全和普通函数一样,不需要使用类的域符号

调用友元函数:和普通函数一样

 

友元类

class Test
{
private:
        int private_i;
        friend class Cakk;      //Cakk为Test的友元类
        friend int read_priv(Test &t,int i);    //友元函数声明
public:
        Test(int i);
};

Test::Test(int i)
{
        this->private_i = i;
}

//友元函数定义
int read_priv(Test &t,int i)
{
        t.private_i += i;       //修改私有变量
        return t.private_i;
}

//友元类
class Cakk
{
private:

public:       
        int read_test_priv(Test &testn)
        {
          testn.private_i++;
return testn.private_i; } }; int main(int argc, char const *argv[]) { Test test1(1); cout<<read_priv(test1,5)<<endl; Cakk cak; cout<<cak.read_test_priv(test1)<<endl; }

在基类 Test 里面声明了一个友元类 Cakk ,友元类里所有的函数都是友元函数,所以这个类里的函数可以修改基类私有值

友元关系是单向的,A是B的友元类,反过来B不一定是A的友元类

友元关系不能传递,A是B的友元类,C是A的友元类,C和B不一定会有什么关系。

 

友元函数

原文:https://www.cnblogs.com/qifeng1024/p/12660138.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!