C++ 在c+;中为类的定义添加新变量+;
我有一个Node.h文件,它引入了Node类,并且在Node.cpp文件中实现了它的方法和成员变量。现在我需要在另一个类的定义中使用这个类,但是我还需要一些额外的变量来实现。我无法更改头文件。那么我该怎么做呢?这就是继承的目的,只需创建一个在节点之后继承的新类,如下所示:C++ 在c+;中为类的定义添加新变量+;,c++,C++,我有一个Node.h文件,它引入了Node类,并且在Node.cpp文件中实现了它的方法和成员变量。现在我需要在另一个类的定义中使用这个类,但是我还需要一些额外的变量来实现。我无法更改头文件。那么我该怎么做呢?这就是继承的目的,只需创建一个在节点之后继承的新类,如下所示: #include "Node.h" class NewNode: public Node { // New stuff goes here } //编辑 如注释中所述,请确保析构函数是虚拟的。有两种方法可以做到
#include "Node.h"
class NewNode: public Node {
// New stuff goes here
}
//编辑
如注释中所述,请确保析构函数是虚拟的。有两种方法可以做到这一点:继承和组合。如果您的新类是一个具有一些附加特性的节点,那么您应该按照其他人的建议使用继承。如果您的新类需要处理节点,但实际上不是节点,请为新类指定一个类节点的数据成员 通过使用组合,新类不会获得节点接口,这意味着节点成员函数不会自动工作。它没有任何
受保护的
功能(节点类可能无论如何都不应该有这些功能)。它从将来可能发生的对节点的更改中获得了一些隔离(如果使用继承,添加新节点函数会将它们添加到新类中)。它减少了新类和节点之间的耦合,这通常是好的
在可能的情况下使用组合,只有在使事情变得更容易时才使用继承
要使用composition,您的新.h文件将具有:
#include "Node.h"
Node m_node;
或
类节点;
std::唯一的\u ptr m_节点;//或其他所需的指针类型
这需要显式分配(当类成员被删除时,std::unique_ptr
用于删除m_节点)和额外的间接层(m_节点->Foo()
而不是m_节点.Foo()
)。使用前向声明而不是将.h文件包含在.h文件中对于大型项目是有益的,因为它往往会加快编译速度
然后只需在youre新类的工作中调用节点
public
函数 子类,从NodeOOP派生一个类是您的朋友:从该类继承并扩展它。如果您不能向头文件添加方法-另一个文件如何知道这些函数?为什么不考虑组合?“我错过了什么?”David Thornley:我同意,但是我认为推荐继承并没有关于设计目标的真实事实是不好的做法。强制性的“因为你是新的继承者,所以确保析构函数是虚拟的”注释。
class Node;
std::unique_ptr<Node> m_node; // or other desired pointer type