C++ 在c+;中为类的定义添加新变量+;

C++ 在c+;中为类的定义添加新变量+;,c++,C++,我有一个Node.h文件,它引入了Node类,并且在Node.cpp文件中实现了它的方法和成员变量。现在我需要在另一个类的定义中使用这个类,但是我还需要一些额外的变量来实现。我无法更改头文件。那么我该怎么做呢?这就是继承的目的,只需创建一个在节点之后继承的新类,如下所示: #include "Node.h" class NewNode: public Node { // New stuff goes here } //编辑 如注释中所述,请确保析构函数是虚拟的。有两种方法可以做到

我有一个Node.h文件,它引入了Node类,并且在Node.cpp文件中实现了它的方法和成员变量。现在我需要在另一个类的定义中使用这个类,但是我还需要一些额外的变量来实现。我无法更改头文件。那么我该怎么做呢?

这就是继承的目的,只需创建一个在节点之后继承的新类,如下所示:

#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