在使用第三方库时,通常会采用公共继承的方式扩展类的功能,在继承基类的时候,可以方便的访问私有变量。某些情况下,无法继承,但又因为业务需要,必须要访问保护变量或保护函数。下面推荐一种安全的简洁的方式。
假设有类QPoint,其结构如下。
class QPoint
{
protected:
double x = 0;
double y = 0;
}
如果我们想直接访问QPoint的x或y,该怎么办呢。可以添加一个中继类,继承QPoint,把需要访问x,y的函数或类声明为friend,就可以访问了,代码如下。
class TestPoint;
class MyPoint : public QPoint { friend TestPoint; };
class TestPoint
{
TestPoint()
{
QPoint *pt = new QPoint();
((MyPoint *)pt)->x = 0;
}
};
通过继承和友元配合的方式,访问保护成员变量或成员函数