我可以在同一个类中创建对象吗?

Posted

技术标签:

【中文标题】我可以在同一个类中创建对象吗?【英文标题】:Can I create object in the same class? 【发布时间】:2013-10-07 12:16:03 【问题描述】:

我可以在同一个类中创建一个类的对象吗? 如果不行我该怎么办?

示例堆栈类

template <class T>
class stack


void push(T d)

...


T pop()

...


//my question is about this one
void sort()

// I get errors when I do that ?
 stack st;
 st.push(4);


;

【问题讨论】:

你想用你的排序方法做什么?如果你想使用你的类,你应该创建该类的实例 stack 需要用stack&lt;T&gt; st; 类型实例化 你遇到了什么错误? 真正的问题是什么?这有帮助吗? ***.com/questions/9902384/… 【参考方案1】:

没有模板也可以,例如

class stack

  public: //<-- added so we can use this
  void push(int d)
  
  //...
  

  int pop()
  
  //...
  

  void sort()
  
    stack st;
    st.push(4);
  
;

现在,在您的模板化案例中,您将需要告诉排序函数要创建什么样的堆栈。

  void sort()
  
    stack<T> st;
    //---^^^
    st.push(4);
  

更多编辑 第 14.6.1 节

"注入的类名可以带或不带 模板参数列表。当它没有使用时 模板参数列表,相当于注入的类名 后跟包含在中的类模板的模板参数 。”

所以,你可以说stack st; 但是,您将无法拥有stack&lt;T&gt; 类型的成员变量。

【讨论】:

【参考方案2】:

在一个类中创建一个相同类型的对象是完全可以的。你应该可以让它与stack&lt;T&gt;一起工作,就像这样

template <class T>
class stack

    ...

    void sort()
    
        stack<T> st;
        st.push(4);
    

    ...
;

根据最新的 C++ 标准,stack st; 似乎是正确的,但可能你的编译器还没有实现这部分 C++ 标准。

话虽如此,但从您发布的代码中并不清楚为什么这是一个模板。如果它是我希望看到的模板

void push(const T& x)

    ...


T pop()

    ...

等等。您确定要将此作为模板吗?您应该正确或根本不这样做。

【讨论】:

我想知道排序如何尝试与st交换自己 我认为第 14.6.1 节意味着我们错了,并且在 VS2012 上没有 也可以编译。 @doctorlove 好的,我会修改我的答案。 我对模板还是新手,所以我编写代码并编译它工作。请问我为什么需要 const T& x ? @user2849898 Tconst T&amp; 都是正确的。但是通过使用const T&amp;,当您将某些东西压入堆栈时,您可以避免制作额外的 T 副本。 T 可以是任何东西,它可能是复制效率非常低的东西。所以这就是为什么在这种代码中最好使用const T&amp; 作为函数参数。

以上是关于我可以在同一个类中创建对象吗?的主要内容,如果未能解决你的问题,请参考以下文章

我可以在密码哈希函数中创建用户对象吗?

我可以在所述对象的构造函数中创建指向对象的指针吗?

可以在 XML 中创建固定宽度的可绘制对象吗?

可以在DAO中创建对象吗

在类中创建对象的最佳实践

在类中创建对象