【问题标题】:C++ Adding a data member to a struct from another base classC++ 将数据成员从另一个基类添加到结构
【发布时间】:2017-02-22 15:18:25
【问题描述】:

美好的一天。我正忙于为大学的一个项目编码,我想知道如何将数据成员添加到节点结构(对于链表),但该结构之前已定义。我不能在原始结构中将其全部定义为指令状态。

这是我的结构体,位于 ListAsSSL.h 文件中:

struct node
{
     node* next;
     Object obj;
};

我可以在另一个头文件中这样做吗:

struct node: node
{
    node* previous;
};

谢谢。我只是自学了装饰器模式,但它只展示了如何使用类而不是结构。

感谢您的帮助。 理查德

【问题讨论】:

  • 类和结构是一样的,只是访问方式不同。
  • 不,你不能这样做。改用继承。
  • 不,你不能重新定义
  • 您需要围绕现有框架(由您的讲师提供)实现一些东西?因为如果是这样的话,我认为你试图做错了。
  • 鉴于原始node 的定义看起来像一个通用的“对象”成员,通过继承或其他方式添加previous 字段会很奇怪。 nextprevious 非常对称。在开始之前,您可能应该与您的讲师澄清说明。也许他们的意思是你不要修改Object,而原来的node 就是一个例子?

标签: c++ struct add decorator


【解决方案1】:

你能创建一个新的结构吗?例如:

struct nodeV2
{
     Object obj;

     nodeV2* next;
     nodeV2* previous;
};

对我来说,这似乎是最简单的方法。这样,您可以保留原始结构,而不会进入继承。

一切顺利。

【讨论】:

  • 这违反了链表的原则。 nextprevious 不应该是 nodeV2 类型吗?
  • 这是我这边的复制粘贴错误。我的错!感谢您的指点。我已按照您的建议解决了这个问题。
【解决方案2】:

不,你不能像这样扩展struct。改为使用继承创建一个新的struct,如下所示:

struct node
{
     node* next;
     Object obj;
};

在你的其他文件中:

struct newNode: node
{
    node* previous;
};

在您的客户端代码中,访问该结构的代码,您必须使用新结构而不是旧结构。请记住,在许多情况下,继承的目的是为了:向现有类添加更多功能!

【讨论】:

  • @NathanOliver 默认访问对结构是公共的,不是吗?
  • 这对我来说似乎不正确,这是一个简化的example@NathanOliver
  • @tobi303 杜普。结构不是类。 nvm我
  • 如果派生类型是class,则基类不可见public。但是如果我们只是坚持struct,那么默认情况下一切都是public。所以答案是有效的。 (而且我现在将在我使用继承的极少数情况下停止写public!)
  • 非常感谢,我想我是否可以这样做,但我认为这是错误的。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-21
  • 1970-01-01
  • 2014-05-28
  • 2016-10-03
  • 1970-01-01
  • 2023-01-17
  • 2022-01-10
相关资源
最近更新 更多