21xrx.com
2024-11-22 09:46:05 Friday
登录
文章检索 我的文章 写文章
如何在C++保护继承中访问基类成员?
2023-07-04 19:05:00 深夜i     --     --
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;

}

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

  
  

评论区

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