zoukankan      html  css  js  c++  java
  • 友元函数

    友元函数

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

    在类里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不一定会有什么关系。

  • 相关阅读:
    paxos算法
    List
    es资料汇总
    尚硅谷Kafka
    lostach安装配置
    zookeeper安装
    zookeeper配置详解
    C# 微信企业付款给个人之相关配置
    JS--正则表达式验证
    uniapp小程序--自定义分享标题
  • 原文地址:https://www.cnblogs.com/qifeng1024/p/12660138.html
Copyright © 2011-2022 走看看