Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/139.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;基类和派生类方法_C++_Class_Oop_Inheritance - Fatal编程技术网

C++ C++;基类和派生类方法

C++ C++;基类和派生类方法,c++,class,oop,inheritance,C++,Class,Oop,Inheritance,我有一个名为AddOns的基类,这个类有9个派生类。我还将向量定义为shared_ptr AddOnsContainer.h std::vector<std::shared_ptr<AddOns>> container; 我只想在一个派生类(SearchProviders)中重写它。对于其他派生类,我希望使用AddOns.h中实现的代码。该方法被定义为virtual,这本应该对我有所帮助,但我的代码仍然为每个派生类运行基方法,即使是我已经重写的类 下面是派生类的方法的定

我有一个名为AddOns的基类,这个类有9个派生类。我还将向量定义为shared_ptr

AddOnsContainer.h

std::vector<std::shared_ptr<AddOns>> container;
我只想在一个派生类(SearchProviders)中重写它。对于其他派生类,我希望使用AddOns.h中实现的代码。该方法被定义为virtual,这本应该对我有所帮助,但我的代码仍然为每个派生类运行基方法,即使是我已经重写的类

下面是派生类的方法的定义,它应该做一些不同的事情

搜索提供者

virtual void ChangeDefaultSearchProvider() override final;
从这里我调用该方法:

AddOnsContainer.cpp

void AddOnsContainer::ChangeDefaultSearchProvider(int pId)
{
    container[pId]->ChangeDefaultSearchProvider();
}
void AddOnsContainer::ChangeDefaultSearchProvider(int pId)
{
    container[pId]->ChangeDefaultSearchProvider();
}
因此,有人能帮助我理解我应该如何在基类中定义方法,以便以后我可以在我的一个派生类中重写它

否则,我应该在每个派生类中实现这个方法,但我知道这不是OOP和继承的概念

提前谢谢大家

致以最良好的祝愿, 马里奥P

附言

这是我向向量添加项(SearchProviders)的代码:

SearchProvider searchProviders;

while (searchProviders.FindNext())
{
    add_item(searchProviders);
}

谢谢大家的帮助

在创建最小代码的过程中,我发现了代码中的问题

问题在于: AddOnsContainer.cpp

void AddOnsContainer::ChangeDefaultSearchProvider(int pId)
{
    container[pId]->ChangeDefaultSearchProvider();
}
void AddOnsContainer::ChangeDefaultSearchProvider(int pId)
{
    container[pId]->ChangeDefaultSearchProvider();
}
因为我直接传递
pId
,我需要减去1,因为目前我不使用图形界面,我只使用控制台变量

然而,由于我花了一些时间来创建我的原始代码的一些最小变化,我决定用Stackoverflow中的链接将其上传到GitHub

可通过以下方式访问代码:

再次感谢大家! 最好的,
Mario P.

看起来是正确的,因此创建对象并将其添加到向量的代码是相关的。我建议将代码缩减为mcve。如果这无助于解决您的问题,请将其发布在此处。如果我没有找到任何不同的解决方案,我很可能会尝试减少代码并将其发布在此处。可能是切片问题?除此之外,您是否有证据证明
容器
中的派生对象当前并非都被视为
加载项
?一切正常,肯定是其他地方出了问题。你可以试穿一下