C++父类方法调用

Tri*_*sie 2 c++ inheritance

我正在创建一个从STL库继承队列的新类.该类的唯一补充是向量.此向量将具有相同的队列大小,并将存储一些整数值,这些值将对应于队列中的每个对象.

现在,我想覆盖pop()和push(),但我只是想为父类的方法添加更多功能.

恩.当在队列对象上调用pop()时,我还想从向量中弹出一个对象.当在队列对象上调用push()时,我还想在向量中插入一个新对象.

我怎么做???

#include <iostream>
#include <iostream>
#include <queue>
#include <vector>

using namespace std;

template <typename type>
class CPU_Q : public queue<type>
{

  public:
    vector<int>  CPU_TIME;

    void increaseTime()
    {
      for(int ndx = 0; ndx < CPU_TIME.size(); ndx++)
      {
        CPU_TIME[ndx]++;
      }
    }

  void push(type insertMe)
  {
    //This is what I want to do
    super::push(); // or queue::push(); maybe?
    CPU_TIME.push_back(0);
  }
  void pop()
  {
    //Something very similar to push()
  }
}
Run Code Online (Sandbox Code Playgroud)

许多人提前感谢

- 三

Jer*_*fin 6

你问过:

void push(type insertMe){
      //This is what I want to do
      super::push(); // or queue::push(); maybe?
      CPU_TIME.push_back(0);
}
Run Code Online (Sandbox Code Playgroud)

那会更像是:

void push(type insertMe) { 
   queue<type>::push(insertMe);
   CPU_TIME.push_back(0);
}
Run Code Online (Sandbox Code Playgroud)

除了你可能想通过const引用接受参数:

void push(type const &insertme) { 
    queue<type>::push(insertMe);
    CPU_TIME.push_back(0);
}
Run Code Online (Sandbox Code Playgroud)

也就是说,标准的容器类并不是真正设计用于继承(例如它们没有虚拟的dtors),所以你必须小心这一点 - 例如当你销毁它时,你需要静态type为派生类型; 如果(例如)你通过指向基类的指针销毁一个行为,你将获得未定义的行为.

  • 我想这取决于你的意思"当然无效".它是"有效的"到任何正确的函数C++编译器必须接受代码的程度.从他的描述来看,从设计的角度来看,它甚至可能是"有效的" - 他没有足够的说法来绝对肯定地说,但你可以在允许队列的任何地方替换他的派生类(唯一明显的例外是通过指针销毁队列). (2认同)