C ++基础和派生类方法的麻烦

时间:2015-04-21 08:32:00

标签: c++ class oop inheritance

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

AddOnsContainer.h

std::vector<std::shared_ptr<AddOns>> container;

现在我的问题是我在AddOns中定义了一个方法

AddOns.h

virtual void ChangeDefaultSearchProvider();

我只想在一个派生类(SearchProviders)中覆盖。对于其他每个派生类,我想使用AddOns.h中实现的代码。该方法被定义为虚拟,应该对我有帮助,但是我的代码仍然为每个派生类运行基本方法,即使对于我已经覆盖的类也是如此。

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

SearchProviders.h

virtual void ChangeDefaultSearchProvider() override final;

从这里我称之为方法:

AddOnsContainer.cpp

void AddOnsContainer::ChangeDefaultSearchProvider(int pId)
{
    container[pId]->ChangeDefaultSearchProvider();
}

所以有人可以帮助我理解我应该如何在我的基类中定义该方法,以便稍后我只能在我的一个派生类中覆盖它。

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

提前谢谢大家!

最诚挚的问候, 马里奥P.

P.S。

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

SearchProvider searchProviders;

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

1 个答案:

答案 0 :(得分:0)

谢谢大家的帮助!

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

问题在于: AddOnsContainer.cpp

void AddOnsContainer::ChangeDefaultSearchProvider(int pId)
{
    container[pId]->ChangeDefaultSearchProvider();
}

因为我直接传递pId,我需要减去1,因为目前我不使用Graphic界面而只使用控制台变体。

但是,由于我花了一些时间来创建原始代码的一些最小变体,所以我决定将它上传到GitHub,并在Stackoverflow中添加链接。

代码可以通过以下方式访问: https://github.com/mariopavlov/C/tree/master/InheritanceExample

再次感谢大家! 最好, 马里奥P.