我有一个专辑类,我想用作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”。 欢迎任何帮助:)

===============>>#1 票数:2 已采纳

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

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

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

记住要初始化Song::null_song

===============>>#2 票数:1

本质上,似乎您试图做的事情归结为实现堆栈。

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

  ask by user3144334 translate from so

未解决问题?本站智能推荐:

1回复

分配内存以调整堆栈大小时出现问题

我已经尝试并尝试找出我的代码中的错误,但是仍然找不到它。我有一个Stack类Album,我想调整它的大小,并认为我做对了。但是由于某种原因,大多数时候程序崩溃了,也许十分之一可以正常工作,我也不知道为什么。如果您指出错误,那将是很大的。 所以这是代码: 这里是函数,在其中某些地方是
3回复

如何重用堆栈中创建的对象

我不是C ++程序员,我非常尊重它的复杂性,所以我通常会远离它。 尽管如此,我还是找到了一个我想修补的图书馆。 该库包含一个示例代码段,其中单个实例在本地范围内分配: 我想修改这个例子来重新初始化对象并用它做更多的事情,但我不能通过getter / setter或公共变量来做。
2回复

在堆栈上构建之前的定义? 与指针类似

关于课程,我有一个简单的问题。 考虑以下对象Apple(删除了默认构造函数)。 现在在堆栈/堆上声明它。 好吧,看起来第二个是指针,这意味着我不必直接声明它。 我可以做Apple * o; 然后将其构建为o = new Apple(true); 但是在堆栈上怎
1回复

此堆栈作为数组实现的构造函数有什么问题?

我下面的构造函数有什么问题? 我收到一条错误消息: 错误1错误C2359:非类类型的成员需要单个初始化程序表达式 错误2错误C2359:非类类型的成员需要单个初始化程序表达式 它说错误在第55行,如果您快速浏览一下,我在下面将字体变为粗体。
1回复

初始化非指针类成员

最近,我一直在阅读来自广受欢迎的C ++ FAQ的构造函数。 其中一个条目提到最好使用初始化列表,而不是在构造函数本身的代码块中初始化类成员。 这是因为编译器倾向于创建类成员的多个副本,而不是简单地创建一个副本。 例 好 坏 它还指出了一件事(并且,虽然这与构
6回复

C ++:如何在堆栈上创建对象数组?

考虑以下Java代码。 因为在Java中,所有对象都存在于Heap中,所以数组不包含对象本身,而是包含对象的引用。 此外,数组本身也是一个对象,因此它存在于堆上。 什么是C ++中的等价物,但保持堆栈中的数组和对象,以尽可能避免需要new和delete? 编辑:更改代码以使
2回复

在堆栈C ++上创建的对象中的数据无效

我真的找不到这个问题的更好的标题。 我有三个类: CheckBox , Button和Background 。 如您所见, CheckBox类包含Button m_button , Button类包含Background* m_pBg 。 在Background构造函数中,我加载
1回复

在C ++中使用自动引用的类制作堆栈时出现的问题

我正在用C ++编写堆栈来管理中缀,后缀和前缀数学运算。 我使用2个类,一个叫做Node(一个自动引用的类),另一个叫做Stack。 在Node中,我有2个属性,一个是ID(一个int,仅用于测试)和element(一个char *)。 在堆栈中,我管理2个堆栈中的所有节点,一个堆栈管理操
1回复

在OOP中传递堆栈对象

我一直在尝试使用堆栈(我认为是标准方法)在C ++中创建一个迷宫程序,但我只是想不通如何通过引用程序中的其他函数来传递堆栈对象。 头文件中的函数声明包含我可以看到的所有内容,但是当我尝试运行该程序时,我不断收到错误消息。 这是函数的声明,以及实现文件中函数的使用情况: 实现方式:
3回复

包含另一个类作为成员变量的类的构造函数

我试图使一个包含另一个类作为成员变量的类。 我遇到以下问题: 并在.cpp文件中获取构造函数 这给出了编译器错误。 但是以下工作原理: 谁能告诉我这两者有什么区别?