我怎样才能访问派生类私有方法?

时间:2018-05-25 06:34:38

标签: c++ visual-c++

下面的代码让我可以访问派生类的私有成员函数。据我所知,一个班级的私人成员无法通过任何方式访问。下面的代码如何能够访问派生类私有方法?

#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 :(得分:0)

访问控制适用于名称,而不适用于对象。例如,

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

您无法访问名称value,但可以通过value访问getValue()引用的对象。

在代码中,

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

您使用的是function的{​​{1}}名称,并且是公开的。所以你可以访问它。另一方面,

Base

将是编译错误,因为您使用的是Derived * d = new Derived(); d->function(); function,这是私有的。