2016-11-21 8 views
-1

クラス内の配列のすべての要素を出力しようとしていますが、開始位置はわかりません。C++:ダイナミックな配列クラスを表示

試行1:これはクラスなので、Coutは機能しません。 coutの定義はありません。 Try 2:ostreamのオーバーロード< <演算子は、単に各要素のforループを作成するためのインデックスがないため動作しないようです。 Try 3:インデックス付きの配列を使用するコピーコンストラクタに似た新しい関数を定義する方法はありますか?

私はC++の初心者ですから、何か助けてください&の説明に感謝します。

// stack.h -- class definition for the stack array 
#include <stdlib.h> 
#include <iostream> 
using namespace std; 

class DoubleStack 
{ 
private: 
    // variables: 
    double *data;  // pointer to the actual array of data 
    size_t stack_size; // Capacity of stack 
    size_t tos;  // Top of stack. tos==0 ==> empty stack 

public: 
    DoubleStack(size_t capacity);   // Constructor 
    DoubleStack(const DoubleStack& rhs); // Copy Constructor 
    ~DoubleStack(void);      // Destructor 
    DoubleStack& operator=(DoubleStack& rhs); // Assignment operator 
    friend ostream& operator << (ostream& os, const DoubleStack& dbl); //Stream insertion operator for Doublestack 
}; 

た.cpp定義

#include "dblstk.h" 
DoubleStack::DoubleStack(size_t capacity)  // create an empty stack 
{ 
    data = new double[capacity];     
    stack_size = capacity;      
    tos = 0;          
} 

DoubleStack::DoubleStack(const DoubleStack& rhs)// copy constructor 
{ 
    data = new double[rhs.stack_size];   
    stack_size = rhs.stack_size;     
    tos = rhs.tos; 
    for (int i = 0; i < stack_size; i++)   
    { 
     data[i] = rhs.data[i];     
    }; 
} 

DoubleStack::~DoubleStack(void)     // Destructor 
{ 
    delete[] data; 
} 

DoubleStack& DoubleStack::operator=(DoubleStack& rhs) // Assignment operator 
{             
    delete[] data; 
    data = new double[rhs.stack_size]; 
    stack_size = rhs.stack_size; 
    tos = rhs.tos; 
    for (int i = 0; i < stack_size; i++)   
    { 
     data[i] = rhs.data[i]; 
    }; 
    return *this;        
} 

ostream& operator << (ostream& os, const DoubleStack& dbl) 
{ 
    for (int i = 0; i<capacity; i++) 
    { 
     os << dbl[i]; 
    } // THIS IS WRONG 
    return os; 
} 
+0

i]; ' – user463035818

+0

1.私は配列のサイズを' capacity'と知っています。どうすれば 'ostream&operator <<(ostream&os、const DoubleStack&rhs)'でそれを使うことができますか? 2.私は 'cout << s1'を試したので' std:cout'は動作しません。s1は新しいDoubleStack、それは動作しません。 – ksavs

答えて

1

あなたのループは、すべての制限はなく、stack_sizeまたはcapacityとしてtosを使用する必要があります。あなたは(あなたがDoubleStackにオーバーロードさ[]オペレータを追加しない限り)dbl.tosdbl.data[i]にアクセスする必要が<<機能で

。スタックの要素間にコンマ区切りを追加しました。 OS << dbl.data [私は質問を理解しない、多分あなたは、単に `オペレータにループを変更する必要があります<<`は `に(私は++;;私はSTACK_SIZEを

#include "dblstk.h" DoubleStack::DoubleStack(size_t capacity) // create an empty stack { data = new double[capacity]; stack_size = capacity; tos = 0; } DoubleStack::DoubleStack(const DoubleStack& rhs)// copy constructor { data = new double[rhs.stack_size]; stack_size = rhs.stack_size; tos = rhs.tos; for (int i = 0; i < tos; i++) { data[i] = rhs.data[i]; }; } DoubleStack::~DoubleStack(void) // Destructor { delete[] data; } DoubleStack& DoubleStack::operator=(DoubleStack& rhs) // Assignment operator { delete[] data; data = new double[rhs.stack_size]; stack_size = rhs.stack_size; tos = rhs.tos; for (int i = 0; i < tos; i++) { data[i] = rhs.data[i]; }; return *this; } ostream& operator << (ostream& os, const DoubleStack& dbl) { for (int i = 0; i<dbl.tos; i++) { if (i > 0) { os << ","; } os << dbl.data[i]; } return os; } 
+0

感謝します! @Barmar – ksavs

関連する問題