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<>
类(坏主意),那么下一步可能是删除模板,因为这会增加复杂性。
【讨论】:
没错,我没有提到我认为我不允许向班级添加新成员。我处理 *array_ 的原因是因为我认为那是我添加成员的地方。就像我将 7 然后 2 然后 10 添加到类的对象中,然后将其打印出来,它应该打印出7 2 10
以上是关于C++ 如何实现这一参数构造函数?的主要内容,如果未能解决你的问题,请参考以下文章