21xrx.com
2024-11-08 23:25:50 Friday
登录
文章检索 我的文章 写文章
如何使用 C++ 私有继承在派生类中访问基类的受保护成员?
2023-07-04 21:41:00 深夜i     --     --
C++ 私有继承 派生类 基类 受保护成员

C++ 的私有继承是一种派生类可以继承基类的方式,此时基类中的公有成员和受保护成员都成为了派生类的私有成员。这种继承方式的作用是隐藏基类中的部分成员,只对派生类开放需要访问的成员。

但是在某些情况下,我们仍需要在派生类中访问基类的受保护成员。这时,可以使用 C++ 的友元机制来实现。

在派生类中增加一个友元函数,该函数可以访问基类的受保护成员。同时,在基类中增加一个保护成员函数,用于调用派生类的友元函数。这样,在派生类中就可以通过调用基类中的保护成员函数,间接地访问基类的受保护成员。

下面是具体的代码实现:


class Base {

protected:

  int protectedMember;

  void callFriend(Base& b) {

    b.friendFunction();

  }

};

class Derived : private Base {

public:

  void accessProtectedMember(Base& b) {

    b.callFriend(*this);

  }

  friend void friendFunction(Derived& d) {

    d.protectedMember = 10;

  }

};

int main() {

  Derived d;

  Base b;

  d.accessProtectedMember(b);

  return 0;

}

在上面的代码中,基类 Base 中的 protectedMember 成员是受保护的,无法直接在派生类 Derived 中访问。为了访问该成员,我们在派生类中增加了一个友元函数 friendFunction,并在基类中增加了一个保护成员函数 callFriend,其中传入了一个 Base 的引用,用于调用 friendFunction。

在使用时,我们创建了一个 Derived 的对象 d 和一个 Base 的对象 b,并将 b 作为参数传入 d 的 accessProtectedMember 函数中,通过调用基类中的 callFriend 函数间接地调用 friendFunction 函数,实现对 protectedMember 成员的访问。

总结来说,私有继承使得基类中的部分成员在派生类中变成了私有成员。但是,使用友元机制可以在派生类中访问基类的受保护成员。这种做法可以实现对基类的部分成员的“选择”隐藏,从而提高代码的安全性和可维护性。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复