【问题标题】:Class member of the same class? [duplicate]同班的班员? [复制]
【发布时间】:2013-11-18 13:44:13
【问题描述】:

是否可以在 C++ 中创建同一类的子成员?类似的东西

class A
{
public:
  int i;
  A child;
};

提前致谢。

【问题讨论】:

    标签: c++


    【解决方案1】:

    这需要无限类型,这在 C++ 中是不可能的。

    您需要额外的间接性,例如通过指针:

    #include <memory>
    
    class A {
    public:
        int i;
        std::unique_ptr<A> child;
    };
    

    【讨论】:

    【解决方案2】:

    你不能有一个相同类型的成员对象(否则类会变得无限大),但你的类可以有一个指向相同类型对象的指针。即,

    class A
    {
    public:
     int i;
     A *child;
    };
    

    是可能的。

    【讨论】:

      【解决方案3】:

      您只能对静态数据成员执行此操作,因为允许静态数据成员的声明具有不完整的类型。您可能不会对非静态数据成员做同样的事情。您只能将它们定义为指向类本身的指针。

      【讨论】:

        【解决方案4】:

        直接 - 不。这个结构有多大?

        但是还有另一种方法,你可以包含一个指向你的类的指针

        class A
        {
        public:
            int i;
            A * child;
        };
        

        如果你想更清楚地实现它,你可以使用std::unique_ptrstd::shared_ptr来代替C风格的指针,这取决于你的需要。

        但是一切都取决于您想要实现的目标。如果您正在实现自己的数据结构——例如列表、树等,这是一个很好的方法。但除此之外,我认为,如果真的需要这种依赖,并且这种解决方案不是某种设计缺陷。

        【讨论】:

          【解决方案5】:

          没有。但你可以做一个参考或指针。

          参考:

          class A
          {
          public:
              int i;
              A(A &child) : child(child) {}
          
              A &child;
          };
          

          裸指针:

          class A
          {
          public:
              int i;
              A *child;
          };
          

          托管(智能)指针:

          class A
          {
          public:
              int i;
              std::unique_ptr<A> child;
          };
          

          【讨论】:

          • 请注意具有引用成员的对象不可分配,这很糟糕。首选指针。
          • 是的,如果您假设对象必须是可分配的。
          猜你喜欢
          • 1970-01-01
          • 2018-10-18
          • 2020-07-17
          • 1970-01-01
          • 2019-10-11
          • 1970-01-01
          • 2015-07-23
          • 2020-09-11
          • 2011-08-09
          相关资源
          最近更新 更多