如何在c ++中获取基类的指针

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)

Ker*_* SB 6

您可以调用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)