我有这个专辑类,我想用作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/