我有这个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;。欢迎任何帮助:)
答案 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。