继承的类对象如何使用私有数据成员?

时间:2019-04-12 19:05:55

标签: c++ pointers inheritance private

私人成员是否也被继承

为什么get()函数能够读取变量n

#include <iostream>
using namespace std;
class base
{
    int n;
public:
    void get()
    {
        cin >> n;
    }
    int ret()
    {
        return n;
    }
};

class inh : public base
{
public:
    void show()
    {
        cout << "hi";
    }
};

int main()
{
    inh a;
    a.get();
    a.show();
    return 0;
}

无论n是否为私有变量,它都能正常工作。

3 个答案:

答案 0 :(得分:1)

所有基类的成员,无论是私有成员还是公共成员,都将被继承(否则继承将是固有-双关语意-破坏),但是它们保留了私有访问修饰符。

由于在您的示例中继承本身是公共的,因此inh具有base的公共成员,因为它是自己的公共成员-并且a.show()完全合法。

答案 1 :(得分:0)

可以调用访问私有数据成员的函数。 private只是意味着您无法访问课程之外的数据成员本身

答案 2 :(得分:0)

您不会在主目录中访问任何私人成员:

int main()
{
  inh a;
  a.get(); // << calling a public method of the base class. OK!
  a.show(); // calling a public method of the inh class. OK!
  return 0;
}

您只能从基类成员中访问基类的私有成员:

class base
{
  int n;
public:
  void get()
  {
    cin >> n; // writing in my private member. OK!
  }
  int ret()
  {
    return n; // returning value of my private member. OK!
  }
};

这可能会导致主要问题:

 inh a;
 a.n = 10; // error

 base b;
 b.n = 10; // error