21xrx.com
2025-04-17 05:53:07 Thursday
文章检索 我的文章 写文章
如何在C++子类中访问父类的私有成员?
2023-07-03 22:42:39 深夜i     204     0
C++ 继承 子类 父类 私有成员 访问

在C++中,父类的私有成员不能被子类直接访问。这是因为私有成员是在类的内部定义的,对于外部无法访问。但是,在某些特定情况下,我们需要在子类中访问父类的私有成员。在本篇文章中,我们将介绍两种方法来实现这一目的。

方法一:使用公有成员函数

这是最常见的方法。我们可以在父类中定义一个公有的成员函数,在子类中调用该函数以访问私有成员。这种方法的优点是安全可靠,可以避免外部直接访问父类私有成员的风险。下面是一个例子:

#include <iostream>
using namespace std;
class Parent {
private:
  int age;
public:
  Parent(int a) : age(a) {}
  int get_age()
    return age;
  
};
class Child : public Parent {
public:
  Child(int a) : Parent(a) {}
  void print_age() {
    cout << "Parent's age is " << get_age() << endl;
  }
};
int main() {
  Child child(35);
  child.print_age();  // Output: Parent's age is 35
  return 0;
}

在上面的代码中,父类Parent中定义了私有成员变量age和公有成员函数get_age(),用于获取age的值。子类Child通过继承Parent类,可以访问get_age()函数,并通过该函数获取父类的私有成员age的值。

方法二:使用友元关系

这种方法比较少见,但在某些情况下可以使用。我们可以在子类中声明一个友元函数,在父类中定义该函数并将其设为友元。这样就可以在子类中访问父类的私有成员了。但这种方法可能会降低代码的安全性,需要谨慎使用。下面是一个例子:

#include <iostream>
using namespace std;
class Parent {
private:
  int age;
  friend void print_age(Parent &parent);
public:
  Parent(int a) : age(a) {}
};
void print_age(Parent &parent)
  cout << "Parent's age is " << parent.age << endl;
class Child : public Parent {
public:
  Child(int a) : Parent(a) {}
  void print_parent_age() {
    print_age(*this);  // print_age函数是Parent类的友元函数,可以访问Parent类的私有成员age
  }
};
int main() {
  Child child(35);
  child.print_parent_age();  // Output: Parent's age is 35
  return 0;
}

在上面的代码中,父类Parent中定义了私有成员变量age和友元函数print_age()。子类Child中定义了print_parent_age()函数,在该函数中调用了Parent类的友元函数print_age(),以获取父类私有成员age的值。

总结

在C++中,我们可以使用公有成员函数或友元关系,来在子类中访问父类的私有成员。但需要注意的是,在使用这些方法时,需要权衡代码的安全性和高效性,并避免出现潜在的风险。

  
  

评论区