结交一个班友并继承它有什么用

What can possible use of making a class friend and inheriting it also?

本文关键字:继承 什么 一个      更新时间:2023-10-16

我正在浏览我的一个本地库,注意到以下内容:

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是否被继承了,那么为什么它被制作成Derivedfriend。此外,评论作为工厂在这里有什么意义?

如果要访问Base函数,::操作符就足够了。

它与设计方法更相关吗?

将基类设为友元,使基类可以访问派生类的私有成员。如果没有看到class Base的定义,很难说出这是什么原因。注释似乎表明基类具有创建派生类对象的成员函数。

一般来说,这是一个糟糕的设计。当基类知道它的派生类时,这是一件坏事,当它可以访问派生类的私有成员时,情况更糟。依赖关系应该只走一条路:派生类依赖基类,而不是相反。换句话说,派生类中的更改不应破坏基类。

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