21xrx.com
2024-11-05 17:24:22 Tuesday
登录
文章检索 我的文章 写文章
如何在C++子类中访问父类的私有成员?
2023-07-03 22:42:39 深夜i     --     --
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++中,我们可以使用公有成员函数或友元关系,来在子类中访问父类的私有成员。但需要注意的是,在使用这些方法时,需要权衡代码的安全性和高效性,并避免出现潜在的风险。

  
  

评论区

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