创建包含类的堆栈

时间:2014-04-20 14:47:43

标签: c++ oop constructor stack

我有这个Album类,我想用作Song类的Stack。这是我到目前为止所做的:


const int intial_capacity=2; 
class Album
{
  Song* songs;
  char* name;
  int top;
  int capacity;
public:
 ...
};
bool Album::empty() const {
return top == -1;
}
bool Album::full() const {
return top == capacity - 1;
}
Song Album::pop() {
if (empty())
    return ???
return songs[top--];
}
Song Album::last() const {
if (empty())
    return ???
return songs[top];
}
bool ResizingStack::push(Song x) {
if (full())
resize();
songs[++top] = x;
return true;
}
void Album::resize() {
capacity *= 2;
int* newsongs = new Song[capacity];
for(int i = 0; i < capacity / 2; i++)
newsongs[i] = songs[i];
delete[] songs;
songs = newsongs;
}

我不知道如何制作我的构造函数和析构函数,以便他们可以正确分配内存并且不会让我崩溃,如果相册为空,我应该返回什么,它包含一个复合类型所以我不能简单地返回0或&#39; \ 0&#39;。欢迎任何帮助:)

2 个答案:

答案 0 :(得分:2)

您可以使用null对象模式。定义(共享)null Song

class Song {
public:
    static const Song null_song;
};

Song Album::pop() {
    if (empty())
        return Song::null_song;
    return songs[top--];
}

请记住初始化Song::null_song

答案 1 :(得分:1)

基本上,似乎你想要做的事情归结为实现堆栈。

您可以使用标准的库类模板std::stack