• C++类的访问权限


    首先明确一个类的用户有三种:

    1. 一类用户:类的成员和友元,访问权限最高
    2. 二类用户:派生类的成员及派生类的友元
    3. 三类用户:外部的用户代码

    一个类有三种成员

    1. private:只有一类用户可以访问private成员。
    2. protected:只有一、二类用户可以访问protected成员。
    3. public:所有用户都可访问

    针对二类用户访问protected成员有一点说明:对于一个派生类对象,只能通过派生类去访问基类的protected成员,而不能通过基类去访问。

    class A
    {
    protected:
    	int a;
    };
    
    class B : A
    {
    	void f() 
    	{
            A *p = this; 
            int c = p->a;//错误,p是基类指针,不能通过基类访问受保护成员
            int d = this->a;//正确
    	}
    };
    
    

    派生访问说明符

    仅影响派生类的二三类用户对基类成员的访问。默认情况下,类B的二类用户(C的一类用户)可以访问A的publicprotected成员,类B的三类用户可以访问A的public成员。但添加派生访问说明符会可能缩小B的二三类用户访问基类成员的权限。

    class A
    {
    public:
        int a;
    protected:
        int b;
    };
    
    class B : private A {};
    
    class C : B
    {
        void f() {cout << b;} //错误,B是private继承A,若是protected或者public继承,则正确。
    }
    
    int main()
    {
        B b;
        cout << b.a;//错误,只有B是public继承A才正确。
    }
    

    派生访问说明符还影响用户操作派生类向基类的转换,但不影响派生类成员和友元进行类型转换。tip:如果某个节点可以通过派生类对基类的公有成员进行访问,那就可以进行派生类到基类的类型转换。

    class A{};
    class B : protected A {
        void f() 
        {
            A *p = this;//正确
        }
    };
    
    int main()
    {
    	B b;
    	A *p = &b;//错误,类B是protected继承A的
    }
    
  • 相关阅读:
    汇编实验程序
    javascript事件列表解说
    c#自动向网页Post信息并提取返回的信息
    C# 全半角转换
    判断 wp 是否是活跃页面
    Font Support for Windows Phone
    C# sqlite for wp7
    C#例子 易懂故事 接口 委托 事件 异步通知 好玩.
    C#用事件模式实现通知 from: http://www.cnblogs.com/guilin_gavin/archive/2011/08/18/2144397.html
    wp7 webclient 的 post 方式获取数据
  • 原文地址:https://www.cnblogs.com/hellozhangjz/p/16304971.html
Copyright © 2020-2023  润新知