首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >向c++中的类定义添加新变量

向c++中的类定义添加新变量
EN

Stack Overflow用户
提问于 2014-03-01 04:33:58
回答 2查看 800关注 0票数 0

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

EN

回答 2

Stack Overflow用户

发布于 2014-03-01 04:38:44

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

代码语言:javascript
复制
#include "Node.h"

class NewNode: public Node {

    // New stuff goes here

}

//编辑

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

票数 2
EN

Stack Overflow用户

发布于 2014-03-05 00:10:37

有两种方法:继承和组合。如果您的新类是一个具有一些附加功能的Node,那么您应该按照其他人的建议使用继承。如果您的新类需要使用Node进行操作,但实际上不是Node,请为新类提供类Node的数据成员。

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

在可能的情况下使用组合,只有当继承使事情变得更容易时才使用继承。

要使用合成,您的新.h文件将具有:

代码语言:javascript
复制
#include "Node.h"

Node m_node;

代码语言:javascript
复制
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函数即可。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22105271

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档