C ++ Copy Constructor Linked Stack

时间:2018-03-13 22:19:00

标签: c++ copy-constructor

所以我在这里有一个类的复制构造函数...

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();
}
}

有人可以帮助弄清楚如何实现复制构造函数吗?

2 个答案:

答案 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;