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