ivo*_*ory 1 c++ pointers overloading
我正在尝试实现类minStack来跟踪Stack的最小元素.以下是我的代码.我试图使用基类Stack的指针,因为我需要更新原始堆栈,但我不知道如何调用它,因为它是基类的指针而不是基类的成员.
class minStack: public Stack{
private:
Stack* minS;
public:
int min()const{
if(minS->top)
return minS->top->data;
return -1;
}
minStack(){
minS = new Stack();
}
int pop(){
if (Stack::this->pop == min()) { //question here!
minS->pop();
}
}
void push(int item){
if(item <= min()){
minS->push(item);
}
Stack::this->push(); //question here!
}
};
Run Code Online (Sandbox Code Playgroud)
您可以调用Stack::pop()并Stack::push()调用基类的函数:
int pop()
{
if (Stack::pop() == min()) { minS->pop(); }
}
void push(int item)
{
if (item <= min())
{
minS->push(item);
}
Stack::push(item);
}
Run Code Online (Sandbox Code Playgroud)
一条不相关的建议:通常不会从容器派生出来制造像你这样的容器适配器.通常你会用成员组成你的班级:
class min_stack
{
std::stack<int> stack_;
std::stack<int> min_;
public:
int pop() { /* ... */ }
void push(int n) { /* ... */ }
};
Run Code Online (Sandbox Code Playgroud)