美文网首页
c++中对于访问权限的控制..

c++中对于访问权限的控制..

作者: 一ccc | 来源:发表于2017-11-25 19:13 被阅读0次

    看深度探索c++对象模型时感觉对c++继承中的权限控制都忘记了..所以写一个复习的..基本是复制粘贴喽.

    受保护的成员protected
    • 和私有成员类似,protected对类的用户不可访问.
    • 和公有成员雷士,受保护的成员对于派生类的成员和来说是可以访问的.
    • 派生类的成员或友元只能通过派生类对象来访问基类的protected,派生类对于一个基类对象中的protected没有访问权限
    //第三条的代码说明
    #include<iostream>
    using namespace std;
    class Point {
    public:
        Point(float x = 0.0) :_x(x) {}
    protected:
        float _x;
    };
    class  Point2d:public Point
    {
    public:
        void asd(Point2d &);
        void asd1(Point &);
    };
    void Point2d::asd(Point2d &a)
    {
        cout << a._x;
    }
    void Point2d::asd1(Point &a)
    {
        cout << a._x;
    }
    
    
    1.png
    class Point2d:public Point
    这个public派生类访问说明符的目的是控制派生类用户(包括派生类的派生类在内)对于基类成员的访问权限,对派生类本身没有影响.
    #include<iostream>
    using namespace std;
    class Point {
    public:
        Point(float x = 0.0, float y = 0.0) :_x(x), _y(y) {}
        void print() { cout << _x<< _y; }
    protected:
        float _x;
    private:
        float _y;
    };
    class  Point2d:public Point
    {
    public:
        int asd() { return _x; }
        int asd1() { return _y; }
    };
    class  Point3d :private Point
    {
    public:
        int asd() { return _x; }
        int asd1() { return _y; }
    };
    int main()
    {
        Point2d a;
        Point3d b;
        a.print();
        b.print();
    }
    
    2.png

    无论派生类访问说明符是public还是protected基类中的private都无法访问.

    3.png

    但是因为Point3d的派生类访问符是private所以Point3d的
    用户无法访问基类中的print函数.


    运行环境 vs2017
    [1]斯坦利·李普曼,约瑟·拉乔伊,芭芭拉·默.C++ Primer中文版(第5版)[J].中国科技信息,2013(20):34.
    ps:参考文献有点酷...

    相关文章

      网友评论

          本文标题:c++中对于访问权限的控制..

          本文链接:https://www.haomeiwen.com/subject/lnwcbxtx.html