2016-11-21 3 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

Я не понимаю вопрос, но, возможно, вы просто должны изменить цикл в '' оператора << для 'для (INT I = 0; я user463035818

+0

1. Я знаю размер массива как' capacity'; как я могу использовать это в 'ostream & operator << (ostream & os, const DoubleStack & rhs)' 2. Я знаю, что 'std: cout' не будет работать, потому что я попробовал' cout << s1', где s1 - новый DoubleStack, и это не сработает. – ksavs

ответ

1

Ваши петли должны все использовать tos как предел, а не stack_size или capacity.

В функции << вам нужно получить доступ к dbl.tos и dbl.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

СПАСИБО! @Barmar – ksavs

Смежные вопросы