21xrx.com
2025-04-07 02:04:57 Monday
文章检索 我的文章 写文章
如何在C++保护继承中访问基类成员?
2023-07-04 19:05:00 深夜i     17     0
C++ 保护继承 基类成员 访问 方法

C++中,继承是一种重要的代码复用和扩展功能的方式。在继承中,派生类继承了基类的所有成员,包括公有、保护和私有成员。保护继承是继承方式之一,它允许派生类访问基类的保护成员和公有成员,但不能访问基类的私有成员。

在保护继承中,如果要访问基类的保护成员,可以使用派生类的成员函数或友元函数。可以在派生类中定义一个公有的成员函数来访问基类的保护成员。这个成员函数可以通过this指针来访问派生类对象的成员和基类对象的成员。

例如,在下面的代码中,派生类Derive继承了基类Base,Derive中定义了一个公有成员函数getBaseX()来访问基类Base中的x成员。

#include <iostream>
using namespace std;
class Base {
protected:
  int x;
public:
  Base()
    x = 0;
  
  void setX(int n)
    x = n;
  
};
class Derive : protected Base {
public:
  void setXPlus(int n) {
    x = n + 1; //访问基类的保护成员
  }
  int getBaseX()
    return x; //访问基类的保护成员
  
};
int main() {
  Derive d;
  d.setXPlus(10); //调用派生类的成员函数,设置基类的保护成员
  cout << d.getBaseX() << endl; //调用派生类的成员函数,获取基类的保护成员
  return 0;
}

另外,如果要在派生类中访问基类的公有成员,可以直接通过派生类对象来访问,而无需定义新的函数。

例如,在以上代码中,派生类Derive可以直接访问基类Base的x成员,就像自己的成员一样,如下所示:

d.x = 20; //访问基类的公有成员

在保护继承中,还可以定义派生类的友元函数来访问基类的保护成员和公有成员。如果一个函数是派生类的友元函数,那么它可以访问派生类的所有成员,包括基类的成员。

例如,在下面的代码中,派生类Derive定义了一个友元函数show,它可以访问派生类的私有成员和基类的保护成员和公有成员。

#include <iostream>
using namespace std;
class Base {
protected:
  int x;
public:
  Base()
    x = 0;
  
  void setX(int n)
    x = n;
  
};
class Derive : protected Base {
private:
  int y;
public:
  friend void show(Derive d);
  void setY(int n)
    y = n;
  
};
void show(Derive d)
  cout << d.x << endl; //访问基类的保护成员
  cout << d.y << endl; //访问派生类的私有成员
int main() {
  Derive d;
  d.setX(10); //访问基类的公有成员
  d.setY(20); //调用派生类的成员函数,设置派生类的私有成员
  show(d); //调用友元函数,访问基类的保护成员和派生类的私有成员
  return 0;
}

在保护继承中,访问基类的成员是很重要的,因为它可以进一步扩展派生类的功能。我们可以使用派生类的成员函数、友元函数和直接访问的方式来访问基类的成员。但是,在使用保护继承时,我们需要注意不要访问基类的私有成员,因为私有成员是基类的严格私有资源,不应该被子类访问或修改。

  
  

评论区

请求出错了