#include<iostream>
using namespace std;
class uvw;
class abc{
private:
int privateMember;
protected:
int protMember;
public:
int publicMember;
};
class def : private abc{
public:
void dummy_fn();
};
class uvw: public def{
};
void def::dummy_fn()
{
abc x;
def y;
uvw z;
cout << z.protMember << endl; // This can be accessed and doesn't give a compile-error
}
Run Code Online (Sandbox Code Playgroud)
从我的理解,def
私下继承abc
,protMember
并publicMember
成为私人def
.所以,现在uvw
从继承时def
,它不应该有任何数据成员.但是,我们可以古怪的访问z.protMember
从dummy_fn()
,因为那里z
不应该有一个变量protMember
在首位.我在哪里错了?
如果您尝试从免费功能访问它,它将无法正常工作.它在这种情况下确实有效,因为它dummy_fn()
是一个成员函数def
,所以它可以访问里面的所有私有东西def
.由于z
是-a def
,它也可以访问实例def
内的私有成员z
.
或者至少这是我的猜测.这是一个奇怪的案例.