结交一个班友并继承它有什么用
What can possible use of making a class friend and inheriting it also?
我正在浏览我的一个本地库,注意到以下内容:
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
是否被继承了,那么为什么它被制作成Derived
的friend
。此外,评论作为工厂在这里有什么意义?
如果要访问Base
函数,::
操作符就足够了。
它与设计方法更相关吗?
将基类设为友元,使基类可以访问派生类的私有成员。如果没有看到class Base
的定义,很难说出这是什么原因。注释似乎表明基类具有创建派生类对象的成员函数。
一般来说,这是一个糟糕的设计。当基类知道它的派生类时,这是一件坏事,当它可以访问派生类的私有成员时,情况更糟。依赖关系应该只走一条路:派生类依赖基类,而不是相反。换句话说,派生类中的更改不应破坏基类。
如果您需要一个工厂,正确的方法是将创建逻辑放入一个单独的工厂类中,而不是基类中。
相关文章:
- 如果我真的真的想从 STL 容器继承,并且我继承构造函数并删除新运算符,会发生什么?
- 继承此C++代码有什么问题
- 结交一个班友并继承它有什么用
- 私下继承C++抽象基类是什么意思
- 有什么理由在没有继承的情况下声明一个虚拟方法
- 该结构继承的类型是什么
- 有了私人继承,什么时候可以上吊?
- 什么时候使用友元类/函数而不是继承
- QT:私人会员而不是继承?原因是什么?这是一个具体的概念吗?
- C ++什么设计将有助于避免使用侦听器时的多重继承
- 停止线程的方法是什么(当我直接从Qthread继承时)
- 我得到了一个使用 SDL 的 OOP 项目。我没有使用继承。我可以给我的评估员什么理由
- C 如果实际上是继承了类,则内部发生了什么
- 从lambda继承是什么意思
- 在多级继承中派生的虚拟基类会发生什么
- 虚拟基类在多级继承中有什么用
- 在C++中,继承超类的正确方法是什么,以便它们的子类在超级类和子类中没有重复的属性?
- 继承Java集合接口(Set、Map、List等)的C++等价物是什么?或者扩展AbstractCollection
- 当我想要创建一个新的流时要继承什么
- 我们不能从基类继承什么:为什么