zoukankan      html  css  js  c++  java
  • C++友元(Friend)简介

    相对Java而言,友元是C++中特有的一种元素,再加上《C++ Primer》也并没有太具体的样例,所以刚接触这个概念的时候懵了非常久,即是自己总结一下,也希望能帮到大家,以下来讲讲友元的使用方法和一些注意的地方。


    操作:

    1)MyFriend类中,将Father类定义成友元

    2)写一个Son类继承自Father类

    3)在Father类和Son类的构造函数中分别创建MyFriend对象,并定义其内部的三个变量

    4)在MyFriend类的构造函数中创建Father对象。并定义其内部的三个变量


    结果:

    1)Father类中创建的MyFriend对象同意直接訪问MyFriend类中全部变量

    2)Son类中创建的MyFriend对象仅仅同意直接訪问MyFriend类中Public变量

    3)由第二点可知,友元关系无法继承

    4)MyFriend类中创建的Father对象仅仅同意直接訪问Father类中的Public变量

    5)由第四点可知,友元关系是单向的。即A为B友元,B并非A的友元。须要另外单独定义


    MyFriend.h

    #include "Father.h"
    
    class MyFriend{
        friend class Quote; //友元类直接这样定义就OK了
    public:
        MyFriend(){
            Father *p = new Father();
            p->var1 = 1;
            p->var2 = 1;
            p->var3 = 1;
        }
        int var1;
    protected:
        int var2;
    private:
        int var3;
    };

    Father.h

    #include "MyFriend.h"
    
    class Father{
    public:
       Father(){
            MyFriend *p = new MyFriend();
            p->var1 = 1;
            p->var2 = 1;
            p->var3 = 1;
        };
        int var1;
    protected:
        int var2;
    private:
        int var3;
    }

    Son.h

    #include "MyFriend.h"
    
    class Son : Father{
       Son(){
            MyFriend *p = new MyFriend();
            p->var1 = 1;
            p->var2 = 1;
            p->var3 = 1;
        };
    }


  • 相关阅读:
    javascript功能插件大集合
    基于Swiper插件的简单轮播图的实现
    LeetCode24. 两两交换链表中的节点
    530. 二叉搜索树的最小绝对差
    416. 分割等和子集
    GAN ——Generative Adversarial Network 理解与推导(一)
    面试题 02.08. 环路检测(返回环路开头节点)
    141.环形链表-LeetCode
    357. 计算各个位数不同的数字个数 ——LeetCode
    LSTM的理解
  • 原文地址:https://www.cnblogs.com/llguanli/p/7045499.html
Copyright © 2011-2022 走看看