簡體   English   中英

C ++復制構造函數鏈接堆棧

[英]C++ Copy Constructor Linked Stack

所以我在這里有一個類的副本構造函數...

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;

這利用了賦值運算符

要使用copy構造函數 ,您寧願說

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

將調用賦值運算符。 要使用復制構造函數,您實際上需要構造對象(在聲明時):

LinkedStack<int> lStack2(lStack1);

要么

LinkedStack<int> lStack2 = lStack1;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM