2014-02-28 43 views
0

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

+2

子类,从节点 –

+0

派生类OOP是你的朋友:从该类继承并扩展它。 – jrd1

+0

如果您不能将方法添加到头文件 - 其他文件如何知道这些功能? –

回答

2

这就是继承是,只要创建节点之后继承一个新的类,就像这样:

#include "Node.h" 

class NewNode: public Node { 

    // New stuff goes here 

} 

//编辑

正如在评论中提到,确保析构函数是虚拟的。

+2

强制性的“因为你是新的继承确保析构是虚拟的”评论。 –

+0

好点本杰明:) – Kelm

0

有两种方法可以做到:继承和组合。如果你的新类是一个具有一些额外功能的Node,那么你应该像其他人所建议的那样使用继承。如果您的新类需要使用Node来完成,但实际上不是Node,请为该类提供Node类的数据成员。

通过使用组合,新类不会获得节点接口,这意味着节点成员函数不会自动工作。它没有得到任何protected功能(Node类可能不应该有)。它可以对将来可能发生的Node更改进行一些隔离(可能会发生这种情况)(如果使用继承,添加新的Node功能会将它们添加到新类中)。它减少了新类和节点之间的耦合,这通常很好。

当你可以的时候使用组合,只有当它使事情变得更容易的时候继承。

可用的组合物,新的.h文件中会有:

#include "Node.h" 

Node m_node; 

class Node; 

std::unique_ptr<Node> m_node; // or other desired pointer type 

需要明确的分配(在std::unique_ptr有当类成员被删除,删除m_node)和额外的间接层(m_node->Foo()而不是m_node.Foo())。使用前向声明而不是在.h文件中包含.h文件对于大型项目来说很好,因为它会加快编译速度。

然后,只需调用节点public功能在您的新课程的运作。