Как я могу получить доступ к частному методу производного класса? - PullRequest
0 голосов
/ 25 мая 2018

Ниже код дает мне доступ к закрытой функции-члену производного класса.Насколько я помню, закрытый член класса не доступен никакими средствами.Каким образом код ниже может получить доступ к частному методу производного класса?

#include "stdafx.h"
#include <iostream>

using namespace std;

class Base
{
public:
    virtual void function()
    {
        cout << __FUNCTION__ << endl;
    }
};

class Derived : public Base
{
private:
    void function()
    {
        cout << __FUNCTION__ << endl;
    }
};

int _tmain(int argc, _TCHAR* argv[])
{
    Base * b = new Derived();
    b->function();
    delete b;
}

Вывод:

Derived::function

1 Ответ

0 голосов
/ 26 мая 2018

Контроль доступа применяется к именам, а не к объектам.Например,

class C {
private:
    int value;
public:
    int & getValue() { return value; }
};

Вы не можете получить доступ к имени value, но вы можете получить доступ к объекту, к которому value относится через getValue().

В коде

Base * b = new Derived();
b->function();

вы используете имя function из Base и оно является общедоступным.Таким образом, вы можете получить к нему доступ.С другой стороны,

Derived * d = new Derived();
d->function();

будет ошибкой компиляции, потому что вы используете function из Derived, который является приватным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...