我有一个介绍Node类的Node.h文件,我在Node.cpp文件中实现了它的方法和成员变量。现在我需要在另一个类的定义中使用这个类,但我还需要一些额外的变量来实现。我无法更改头文件。那么我该怎么做呢?
发布于 2014-03-01 04:38:44
这就是继承的目的,只需创建一个在Node之后继承的新类,如下所示:
#include "Node.h"
class NewNode: public Node {
// New stuff goes here
}//编辑
正如评论中提到的,确保析构函数是虚拟的。
发布于 2014-03-05 00:10:37
有两种方法:继承和组合。如果您的新类是一个具有一些附加功能的Node,那么您应该按照其他人的建议使用继承。如果您的新类需要使用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文件是很好的,因为它往往会加快编译速度。
然后只需在新类的工作中调用节点public函数即可。
https://stackoverflow.com/questions/22105271
复制相似问题