c++ - C++ 获取基类指针的方法

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

最佳答案

可以调用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)成员:

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

关于c++ - C++ 获取基类指针的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19608489/

相关文章:

c++ - 如何创建具有较低完整性级别 (IL) 的新流程?

c++ - 如何将所有依赖项和共享库编译成一个二进制文件

c++ - 空的 unordered_map 上的 find() 会导致访问冲突吗?

c - 如何使函数返回指向 C 中新字符串的指针?

c++ - 始终返回的地址为0而不是实际值

java - Java Wrapper类的 'toString'方法是重载的还是抽象方法,在不同的类中有不同的定义?

c++ - 根据 “T”是否具有成员函数 “myfunc”来重载函数模板?

c++ - 如何为一组对象重载运算符

c++ - gltf 没有在皮肤中指定骨架值是什么意思?

指向对象的指针 vector 中的 C++ 差异