下面的代码让我可以访问派生类的私有成员函数。据我所知,一个班级的私人成员无法通过任何方式访问。下面的代码如何能够访问派生类私有方法?
#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
答案 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
,这是私有的。