• 隐藏的实现(Thinking C++)


    隐藏的实现
    private,protected,public三个关键字
     
    C与C++的区别:struct 和class关键字,不再权限关键字下的成员,struct默认为公有(public),class默认为私有(private)
     
    友元
    定义函数或者类为当前类的友元则友元函数或类对当前类具有所有的访问权限,友元只能在某个类里面定义,因为只有类有权限的意义
    void global_fun();
     
    class b
    {
    public:
        void b_member_fun();
        void b_member_fun2();
    };
     
    class c
    {
        public:
            void c_member_fun();
    }
     
    class a
    {
        private:
            void a_member_fun();
            int a_data;
        public:
            friend void global_fun(); //声明global_fun()为类a的友元函数
            friend void b::b_member_fun();//声明b_member_fun()为类a的友元函数
    };
     
    void global_fun()
    {
        //....
        a a1;
        a1.a_member_fun(); //a_member_fun为私有成员函数
        /*由于a声明了global_fun()为友元函数,所以上一句调用没有错,可以        访问到a的私有成员*/
        //...
    };
     
    void b::b_member_fun()
    {
        a a2;
        a2.a_member_fun(); //正确
    };
     
    void b::b_member_fun2()
    {
         a a2;
        a2.a_member_fun(); //错误,b::b_member_fun2()不是a的友元函数
    }
     
    void c::c_member_fun()
    {
        a a3;
        a3.a_data = 1;
        a3.a_member_fun();
        //正确,c类为a类的友元函数,所以c的所有成员函数都有对a的所有权限
    }
     
    特别情况
    当成员函数需要传递一个类指针的函数,友元函数如果需要调用带有类指针的函数,那么友元函数需要在参数也定义类指针,如果类没有声明,可以先声明一个类,但不去定义
     
     
    嵌套友元
    嵌套的类不能获取上一级类的私有访问权限,解决方法是在上一级类定义嵌套类为友元类,如
    class a
    {
        class b
        {
            void b_f();
            void b_f2();
        }
        friend a::b;//定义嵌套类b为a的友元类
    }
  • 相关阅读:
    数据库常见操作三
    数据库常见操作二
    readelf源码学习
    c++ 常用排序
    分析笔记-反编译失败的锁机apk简单分析
    低自尊者
    Microstation软件操作学习2
    Bentley MicroStation版本号
    Microstation软件操作学习1
    MSCEC#创建工程
  • 原文地址:https://www.cnblogs.com/cplover/p/3371905.html
Copyright © 2020-2023  润新知