2016-11-21 13 views
-1

클래스의 모든 요소를 ​​인쇄하려고하지만 시작 위치를 모릅니다.C++ : 동적 배열 클래스 표시

시도해보기 1 : Cout은 클래스이므로 작동하지 않습니다. cout에 대한 정의가 없습니다. 시도 2 ​​: ostream 오버로드 < < 연산자는 단순히 각 요소에 대한 for 루프를 만들 색인이 없기 때문에 작동하지 않는 것처럼 보입니다. 시도 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 = 0 int로 내가 ++; 나는 user463035818

+0

1. 배열의 크기를 'capacity'로 알고있다. 어떻게 ostream & operator << (ostream & os, const DoubleStack & rhs)'에서 이것을 사용할 수 있습니까? 2.'cout << s1'을 시도했기 때문에'std : cout'이 작동하지 않을 것입니다. s1은 새로운 DoubleStack이고, 작동하지 않습니다. – ksavs

답변

1

귀하의 루프는 모두 제한하지 stack_size 또는 capacity으로 tos을 사용해야합니다. 당신이 dbl.tosdbl.data[i]가 (당신이하지 않는 DoubleStack에 오버로드 [] 연산자를 추가)에 액세스하는 데 필요한 << 기능에

. 스택의 요소 사이에 쉼표 구분 기호를 추가했습니다.

#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

감사합니다. @ 바마르 – ksavs