C++ 如何实现这一参数构造函数?

Posted

技术标签:

【中文标题】C++ 如何实现这一参数构造函数?【英文标题】:C++ How do I implement this one parameter constructor? 【发布时间】:2017-02-09 19:40:58 【问题描述】:

在这个项目中,我必须创建一个名为 Chain 的类。链将是一个值列表(如数组)。问题是我必须在不使用 STL 库的情况下创建这个链。

现在,我必须实现这个参数构造函数:

Chain(const Object& item)

    // Write something.

顺便说一句,“对象”只是类模板的名称。

我将这两个私有变量作为类的一部分:

size_t size_;
Object *array_;

假设我想从 main 拨打这个电话:

Chain<int> d7; 

这只是将 7 传递给一个参数构造函数。

我将如何实现这一参数构造函数?

另外,如果我从 main 我输入例如,我需要能够打印出这个类:

Chain<int> d7;  // A chain containing 7 should be created.
cout << d;  // Should just print [7]

为了做到这一点,我必须实现这个重载的

// Overloading the << operator.
 friend std::ostream &operator<<(std::ostream &out, const Chain &a_chain)
 
   // Print the chain.
   return out;
 

目前尝试的代码:

// One parameter constructor.

Chain(const Object& item)


array_ = new Object[item];
// array_=item;
size_++;


// Overloading the << operator.
friend std::ostream &operator<<(std::ostream &out, const Chain &a_chain)


   cout << array_ << endl;

   return out;

【问题讨论】:

当构造函数需要引用时,不能使用文字。引用需要引用变量。 所有的粗体字都很烦人。更不用说分散注意力了。 @Barmar:什么? melpon.org/wandbox/permlink/Yhx9q3HtkkEay4Ee 是的,const 引用可以接受文字参数。 @Dan 你怎么知道他们还没有教过这个?我们必须按照自己的方式来解决这个问题。 【参考方案1】:

对于这些类型的事情,最好一步一步来,确保在增加额外的复杂性之前,您已经完成了每个小部分。详情请见How to debug small programs。

对于您展示的代码(现在),这里的代码完全与您描述的一样,没有更多。

template<typename T>
struct Chain

    T value;
;

// Overloading the << operator.
template<typename T>
std::ostream &operator<<(std::ostream &out, const Chain<T> &a_chain)

    out << a_chain.value << std::endl;
    return out;


int main()

    Chain<int> d 7 ;  // A chain containing 7 should be created.
    std::cout << d;  // Should just print [7]

    return 0;

请注意,不需要使用Object* array_ 来让这个sn-p 的代码工作。一旦你对它的作用感到满意,你就可以添加更多的部分。例如,如果您真的想实现自己的 std::vector&lt;&gt; 类(坏主意),那么下一步可能是删除模板,因为这会增加复杂性。

【讨论】:

没错,我没有提到我认为我不允许向班级添加新成员。我处理 *array_ 的原因是因为我认为那是我添加成员的地方。就像我将 7 然后 2 然后 10 添加到类的对象中,然后将其打印出来,它应该打印出 7 2 10

以上是关于C++ 如何实现这一参数构造函数?的主要内容,如果未能解决你的问题,请参考以下文章

如何禁止在 C++ 中使用默认构造函数?

如何使用构造函数?

如何验证 C++ 构造函数中的输入参数?

C++:如何将变量作为参数传递给类构造函数

如何在现有构造函数中添加附加参数。 C++ ASIO

如何在 C++ 中调用基类的参数化构造函数?