Как закрытый член данных используется унаследованным объектом класса? - PullRequest
0 голосов
/ 12 апреля 2019

Do частные члены также наследуются ?

Почему функция 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 ]

1 голос
/ 12 апреля 2019

Все члены базового класса, как частные, так и публичные, наследуются (в противном случае наследование будет по своей природе - каламбур - нарушен), но они сохраняют модификатор частного доступа.

С момента наследованияСам по себе в вашем примере является общедоступным, inh имеет открытых членов base, так как это собственные публичные члены - и a.show() совершенно законно.

0 голосов
/ 12 апреля 2019

У вас нет доступа к закрытым членам в основном:

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
0 голосов
/ 12 апреля 2019

Хорошо вызывать функции, которые обращаются к частным членам данных.private просто означает, что вы не можете получить доступ к самим членам данных вне класса

...