C++复制构造函数链接堆栈

C++ Copy Constructor Linked Stack

本文关键字:堆栈 链接 构造函数 复制 C++      更新时间:2023-10-16

所以我这里有一个类的副本构造函数......

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

做了一个简单的程序,但我的教授告诉我我没有使用复制构造函数,我似乎找不到如何做到这一点。我得到的只是这个,但它没有显示第二个对象"lStack2"。

这是我的主要...

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

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

您有两个堆栈

LinkedStack<int> lStack1;
LinkedStack<int> lStack2;

然后将第一个分配给第二个

lStack2 = lStack1;

这利用了赋值运算符。

要使用复制构造函数,你宁愿说

LinkedStack<int> lStack2(lStack1);
lStack2 = lStack1

将调用赋值运算符。要使用复制构造函数,您实际上需要构造对象(在声明它时(:

LinkedStack<int> lStack2(lStack1);

LinkedStack<int> lStack2 = lStack1;