结识类朋友并继承它又有什么用?

问题描述 投票:1回答:1

我正在浏览我的一个本地图书馆,并注意到以下情况:

class Derived : public Base
{
        friend class Base; // serves as a factory
    protected:
        pthread_spinlock_t allocLock;
        bool isSafe{ true };

        Derived();
        char *funcA() override;

    public:
        void funcB( bool _in ) override;
        virtual ~Derived();
};

我无法理解Base是否已被继承,为什么将其设为friendDerived。注释作为工厂在这里如何有意义?

如果要访问Base功能,那么::运算符就足够了。

与设计方法是否更相关?

c++ c++11 inheritance friend
1个回答
0
投票

使基类成为朋友后,基类就可以访问派生类的私有成员。在不了解class Base的定义的情况下,很难说出这是什么原因。该注释似乎表明基类具有成员函数来创建派生类的对象。

通常,这是错误的设计。当基类完全了解其派生类时,这是一件坏事,而当它访问派生类的私有成员时,情况更糟。依赖关系只能以一种方式:派生类依赖于基类,而不是另一种方式。换句话说,派生类的更改不应破坏基类。

如果需要工厂,正确的方法是将创建逻辑放入单独的工厂类中,而不是基类中。

© www.soinside.com 2019 - 2024. All rights reserved.