zoukankan      html  css  js  c++  java
  • C/C++:C++友元类


    C++友元类:

    正常情况下,一个类是訪问不到还有一个类的私有成员的。

    就像以下这个:


    
    
    
    #include <iostream>
    
    class A{
    
    private:
        int a;
    
    public:
        A(){
            a = 1;
        }
    
    };
    
    class B:public A{
    
    public:
        B(){
            std::cout << a << std::endl;
        }
    };
    
    int main()
    {
        B p;
        p();
        return 0;
    }
    

    这是就会报错:main.cpp|6|error: 'int A::a' is private| 也就是说a是私有的,B訪问不到。

    而这时,我们就要用到友员类的概念了。

    <span style="font-size:18px;">
    
    
    #include <iostream>
    
    class A{
        friend class B;//指定B为A的友元类。
    
    private:
        int a;
    
    public:
        A(){
            a = 1;
        }
    
    };
    
    class B:public A{
    
    public:
        B(){
            std::cout << a << std::endl;
        }
    };
    
    int main()
    {
        B p;
        return 0;
    }
    </span>

    这时。B就能訪问A的私有成员了。

    即使B没有继承至A,也是能訪问的。

    就像这样:

    <span style="font-size:18px;">
    
    
    #include <iostream>
    
    class A{
        friend class B;//指定B为A的友元类。
    
    private:
        int a;
    
    public:
        A(){
            a = 1;
        }
    
    };
    
    class B{
    
    public:
        B(){
            A a;
            std::cout << a.a << std::endl;
        }
    };
    
    int main()
    {
        B p;
        return 0;
    }
    </span>


    然而实际上。在开发过程中。程序猿是非常少使用到友元类的,由于它使两个类直接的关系太过紧密。



    PS:初学C++,有什么不正确的地方。一定要告诉我呀_(:з」∠)_。我好纠正学习,也不会误引导人们。


    版权声明:本文博主原创文章。博客,未经同意不得转载。

  • 相关阅读:
    nconf修改密码
    快速清空一个文
    freebsd安装snmp
    -bash: mail: command not found
    重置Cacti密码
    cacti添加被监控机全过程
    cacti图形字符乱码
    博客链接
    tar命令详解
    MainPresenter 实现类
  • 原文地址:https://www.cnblogs.com/blfshiye/p/4821395.html
Copyright © 2011-2022 走看看