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

时间:2013-10-26 15:34:11

标签: 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!
    }
};

1 个答案:

答案 0 :(得分: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);
}

一条不相关的建议:通常,人们不会从容器中派生以制作像你这样的容器适配器。通常情况下,你会用成员撰写你的班级:

class min_stack
{
    std::stack<int> stack_;
    std::stack<int> min_;
public:
    int pop() { /* ... */ }
    void push(int n) { /* ... */ }
};
相关问题