c++中如何强制访问类的保护(protected)/私有(private)性质的成员函数和成员变量

发布时间 2023-04-28 17:09:24作者: 李建业

在使用第三方代码库时,有时候需要访问某个类的函数或者变量,但该对象是保护或者私有的,导致无法正常访问。其实,通过一个简单的友元friend类或函数,可以轻松突破编译器的限制。下面是代码实例。
假设第三方库有person类,定义如下。

class Person
{
private:
int age = 18;
}

那么如果强行访问age变量呢,我们可以继承Person类,把需要访问该变量的类或函数声明为friend,然后通过指针强制转换,访问该变量。

class MyPerson : public : Person
{
firend TestFunc;
}

下面是访问方法

void TestFunc()
{
Person p;
((MyPerson*)(&p)) ->age = 20;
}

在类中访问age的话,只需要把类声明为friend即可,其余的流程同上。