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

看深度探索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:参考文献有点酷...

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,805评论 18 399
  • 前言 把《C++ Primer》[https://book.douban.com/subject/25708312...
    尤汐Yogy阅读 9,552评论 1 51
  • C++文件 例:从文件income. in中读入收入直到文件结束,并将收入和税金输出到文件tax. out。 检查...
    SeanC52111阅读 2,888评论 0 3
  • C++ 面向对象编程 博客园地址:http://www.cnblogs.com/xiongxuanwen/p/42...
    先之阅读 692评论 0 1
  • 我心里的你 我希望他走动一下 从你在的地方来看看我
    浅尘一笙阅读 158评论 0 9