我有这个专辑类,我想用作Song类的堆栈。这是我到目前为止所做的:



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;
}




我不完全知道如何构造我的构造函数和析构函数,以便它们可以正确分配内存,并且不会给我造成崩溃;另外,如果Album为空,它包含复合类型,那么我应该返回什么,所以我不能简单地返回0或“ \ 0”。欢迎任何帮助:)

最佳答案

您可以使用空对象模式。定义一个(共享的)空Song

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

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


记住要初始化Song::null_song

关于c++ - 创建一个包含类的堆栈,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23183756/

10-11 15:49