我正在尝试实现一个Bag抽象数据类型的任务(所以我宁愿不发布完整的代码)。
以下是我目前正在尝试实施的方法:
template <typename T>
Bag<T> Bag<T>::operator+ (const Bag<T>& bag) {
int sizeofCurrentMultiset = cardinality_;
int sizeofPassedMultiset = bag.cardinality_;
int totalSize = sizeofCurrentMultiset + sizeofPassedMultiset;
Bag<T> newBag(totalSize);
for (int i = 0; i < sizeofCurrentMultiset; i++) {
newBag.insert(array_[i]);
}
for (int i = 0; i < sizeofPassedMultiset; i++) {
newBag.insert(bag.array_[i]);
}
return newBag;
}
我将元素存储为动态数组。
我的问题是,当新包返回时,我可以打印基数很好(打印到4,原始包每个有两个元素),但动态数组不包含数字(它打印出一些随机数字如-1789102)。但是,当我尝试在返回包之前打印出元素时,它会打印出来。
毫无疑问,这将是微不足道的,但我很感激帮助。
感谢。
答案 0 :(得分:2)
您需要为Bag
类编写复制构造函数。看起来你正在获得默认的构造函数,它只是你的类的浅表副本。这就是cardinality
成员可以正常但你的动态数组没有的原因。当operator+
函数返回Bag
对象时,将调用复制构造函数。