在c ++中将新变量添加到类的定义中

时间:2014-02-28 20:33:58

标签: c++

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

2 个答案:

答案 0 :(得分:2)

这就是继承的用途,只需创建一个继承Node之后的新类,如下所示:

#include "Node.h"

class NewNode: public Node {

    // New stuff goes here

}

//修改

如评论中所述,请确保析构函数是虚拟的。

答案 1 :(得分:0)

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

通过使用合成,新类不会获得Node接口,这意味着Node成员函数不会自动运行。它没有获得任何protected功能(Node类可能不应该具有该功能)。它可以避免将来可能发生的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文件对于大型项目是有好处的,因为它往往会加快编译速度。

然后在新课程的工作中调用Node public函数。