看深度探索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;
}
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();
}
无论派生类访问说明符是public还是protected基类中的private都无法访问.
但是因为Point3d的派生类访问符是private所以Point3d的
用户无法访问基类中的print函数.
运行环境 vs2017
[1]斯坦利·李普曼,约瑟·拉乔伊,芭芭拉·默.C++ Primer中文版(第5版)[J].中国科技信息,2013(20):34.
ps:参考文献有点酷...