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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我怎样才能访问派生类私有方法?相关的知识,希望对你有一定的参考价值。

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

#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
答案

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

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();

将是一个编译错误,因为您正在使用functionDerived,这是私有的。

以上是关于我怎样才能访问派生类私有方法?的主要内容,如果未能解决你的问题,请参考以下文章

《面向对象程序设计》高手进~~~~~~~~~~~~!!

继承对基类私有数据成员的访问(在派生类中继承基类成员函数)

14.11类的成员修饰符

通过基类指针C++访问派生类的成员

如何访问派生类中的私有集属性[重复]

C ++访问派生类中基的私有结构