多级私有和公共继承 - 异常访问

Ank*_*and 15 c++ inheritance

#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,protMemberpublicMember成为私人def.所以,现在uvw从继承时def,它不应该有任何数据成员.但是,我们可以古怪的访问z.protMemberdummy_fn(),因为那里z不应该有一个变量protMember在首位.我在哪里错了?

Tri*_*dle 6

如果您尝试从免费功能访问它,它将无法正常工作.它在这种情况下确实有效,因为它dummy_fn()是一个成员函数def,所以它可以访问里面的所有私有东西def.由于z 是-a def,它也可以访问实例def内的私有成员z.

或者至少这是我的猜测.这是一个奇怪的案例.

  • @AnkeshAnand访问和对象成员是不同的问题.派生类包含其基础的所有成员.你不能总是访问它们的事实并不意味着它们不在那里. (2认同)