所以我在这里有一个类的复制构造函数...
template<class ItemType>
LinkedStack<ItemType>::LinkedStack(const LinkedStack<ItemType>& aStack)
{
// Point to nodes in original chain
Node<ItemType>* origChainPtr = aStack.topPtr;
if (origChainPtr == nullptr)
topPtr = nullptr; // Original stack is empty
else
{
// Copy first node
topPtr = new Node<ItemType>();
topPtr->setItem(origChainPtr->getItem());
// Point to last node in new chain
Node<ItemType>* newChainPtr = topPtr;
// Advance original-chain pointer
origChainPtr = origChainPtr->getNext();
// Copy remaining nodes
while (origChainPtr != nullptr)
{
// Get next item from original chain
ItemType nextItem = origChainPtr->getItem();
// Create a new node containing the next item
Node<ItemType>* newNodePtr = new Node<ItemType>(nextItem);
// Link new node to end of new chain
newChainPtr->setNext(newNodePtr);
// Advance pointer to new last node
newChainPtr = newChainPtr->getNext();
// Advance original-chain pointer
origChainPtr = origChainPtr->getNext();
} // end while
newChainPtr->setNext(nullptr); // Flag end of chain
} // end if
} // end copy constructor
我做了一个简单的程序,但我的教授告诉我,我没有使用复制构造函数,我似乎也找不到如何做到这一点。我得到的只是这个,但它没有显示第二个对象&#34; lStack2&#34;。
这是我的主要......
#include <iostream>
#include "LinkedStack.h"
using namespace std;
int main(){
int val1, val2, val3, val4;
LinkedStack<int> lStack1;
LinkedStack<int> lStack2;
lStack2 = lStack1;
cout << "Enter the first value: ";
cin >> val1;
cout << "Enter the second value: ";
cin >> val2;
cout << "Enter the third value: ";
cin >> val3;
cout << "Enter the fourth value: ";
cin >> val4;
lStack1.show();
lStack2.show();
return 0;
}
这是我的显示功能......
template <class ItemType>
void LinkedStack<ItemType>::show() const{
Node<ItemType>* entryPtr = topPtr;
while (entryPtr != nullptr){
cout << entryPtr->getItem() << endl;
entryPtr = entryPtr->getNext();
}
}
有人可以帮助弄清楚如何实现复制构造函数吗?
答案 0 :(得分:3)
你有两个堆栈
LinkedStack<int> lStack1;
LinkedStack<int> lStack2;
然后将第一个分配给第二个
lStack2 = lStack1;
这利用了assignment operator。
要使用copy constructor,您宁愿说
LinkedStack<int> lStack2(lStack1);
答案 1 :(得分:2)
lStack2 = lStack1
将调用赋值运算符。要使用复制构造函数,您实际需要构造对象(在声明它时):
LinkedStack<int> lStack2(lStack1);
或
LinkedStack<int> lStack2 = lStack1;