我是 C++ 中的 OOP 新手,我不确定这是否可行,但我希望在 C++ 标准优先级队列中有多种类类型。
我设置了类,以便它们都从基类继承,然后使用基类来创建所有函数,但我只是不知道如何让所有东西都调用子类函数。在我调用foo()
函数的那一刻,它调用父函数而不是子函数
有没有办法在不明确知道它是什么类型的情况下进行回退?我将有几个不同的子类,它们会做不同的事情,而不仅仅是显示的一个。
代码的输出当前是Parent
我猜到的Child
。
我有一种感觉我做错了virtual
关键字,应该foo()
是一个纯粹的虚函数?
父母.h
#pragma once
class Parent{
public:
virtual ~Parent(){};
virtual std::string foo() const { return "Parent"; }
};
孩子.h
#pragma once
#include <iostream>
#include "Parent.h"
class Child: public Parent{
public:
Child();
~Child();
std::string foo() const;
};
孩子.cpp
#include <iostream>
#include "Parent.h"
#include "Child.h"
Child::Child(){}
Child::~Child(){}
std::string Child::foo() const{ return "Child"; }
主文件
#include <iostream>
#include <queue>
#include "Parent.h"
#include "Child.h"
using namespace std;
//Fake compare function for compilation, real one calls a compare method
class comparefunction{
public:
bool operator()( const Parent& p1, const Parent& p2) const{
return true;
}
};
int main(){
priority_queue<Parent, vector<Parent>, comparefunction> pq;
Child c;
pq.push(c);
cout << pq.top().foo() << endl;
pq.pop();
}