MergeSort运行给定的向量,并通过我的Citizen基类中的适应度变量进行排序。
我想在我的SGA类中使用它来对它的SCitizen(它继承了适应度变量?)做同样的事情;但我不能,因为函数要求公民类型。
是否不能将派生类用于同一函数,因为该函数只使用所有类都将具有的基类的成员?或者我在课程设置中遗漏了什么?
谢谢你的帮助!很抱歉,如果这是重复的;我在这里搜索了一下,然后用谷歌搜索,但一无所获——我甚至不太确定该用谷歌搜索什么。。
class Citizen
{
public:
double fitness;
Citizen();
};
class SCitizen : public Citizen
{
public:
std::string code;
SCitizen();
};
class GA
{
public:
std::vector<Citizen>* citizens;
void MergeSort(std::vector<Citizen>* list);
};
class SGA : public GA
{
public:
std::vector<SCitizen>* sCitizens;
void FitnessSort();
};
为了使vector<T>
存储Citizen
值及其所有子类型,您需要使用vector<Citizen*>
。vector<Citizen>
只能存储Citizen
的值,并且将对所使用的任何子类型进行切片。