C++基础和派生class方法麻烦
C++ base and derived class method trouble
我有 1 个名为 AddOns 的基础 class,这个 class 有 9 个派生的 classes。我也将向量定义为 shared_ptr
AddOnsContainer.h
std::vector<std::shared_ptr<AddOns>> container;
现在我的问题是我在 AddOns 中定义了一个方法
AddOns.h
virtual void ChangeDefaultSearchProvider();
我只想在一个派生的 classes (SearchProviders) 中覆盖。对于每个其他派生的 class,我想使用 AddOns.h 中实现的代码。该方法被定义为虚拟的,这应该对我有帮助,但我的代码仍然为每个派生的方法运行基本方法class,即使是我已经覆盖的方法。
这是派生 class 方法的定义,它应该做一些不同的事情。
SearchProviders.h
virtual void ChangeDefaultSearchProvider() override final;
我从这里调用方法:
AddOnsContainer.cpp
void AddOnsContainer::ChangeDefaultSearchProvider(int pId)
{
container[pId]->ChangeDefaultSearchProvider();
}
所以有人可以帮助我理解我应该如何在我的基础 class 中定义该方法,以便稍后我可以仅在我的派生 classes 中覆盖它。
否则我应该在每个派生中实现这个方法class,但据我所知,这不是面向对象编程和继承的思想。
提前谢谢大家!
此致,
马里奥 P.
P.S.
这是我将项目 (SearchProviders) 添加到矢量的代码:
SearchProvider searchProviders;
while (searchProviders.FindNext())
{
add_item(searchProviders);
}
谢谢大家的帮助!
我在创建最小代码的过程中发现了我的代码中的问题。
问题出在:
AddOnsContainer.cpp
void AddOnsContainer::ChangeDefaultSearchProvider(int pId)
{
container[pId]->ChangeDefaultSearchProvider();
}
因为我直接传pId
,需要减1,因为目前我没有使用图形界面,我只使用控制台变体。
但是,由于我花了一些时间来创建我的原始代码的一些最小变化,我决定将它上传到 GitHub 和 link 在 Whosebug 中。
代码可以通过以下方式访问:
https://github.com/mariopavlov/C/tree/master/InheritanceExample
再次感谢大家!
最好,
马里奥 P.
我有 1 个名为 AddOns 的基础 class,这个 class 有 9 个派生的 classes。我也将向量定义为 shared_ptr
AddOnsContainer.h
std::vector<std::shared_ptr<AddOns>> container;
现在我的问题是我在 AddOns 中定义了一个方法
AddOns.h
virtual void ChangeDefaultSearchProvider();
我只想在一个派生的 classes (SearchProviders) 中覆盖。对于每个其他派生的 class,我想使用 AddOns.h 中实现的代码。该方法被定义为虚拟的,这应该对我有帮助,但我的代码仍然为每个派生的方法运行基本方法class,即使是我已经覆盖的方法。
这是派生 class 方法的定义,它应该做一些不同的事情。
SearchProviders.h
virtual void ChangeDefaultSearchProvider() override final;
我从这里调用方法:
AddOnsContainer.cpp
void AddOnsContainer::ChangeDefaultSearchProvider(int pId)
{
container[pId]->ChangeDefaultSearchProvider();
}
所以有人可以帮助我理解我应该如何在我的基础 class 中定义该方法,以便稍后我可以仅在我的派生 classes 中覆盖它。
否则我应该在每个派生中实现这个方法class,但据我所知,这不是面向对象编程和继承的思想。
提前谢谢大家!
此致, 马里奥 P.
P.S.
这是我将项目 (SearchProviders) 添加到矢量的代码:
SearchProvider searchProviders;
while (searchProviders.FindNext())
{
add_item(searchProviders);
}
谢谢大家的帮助!
我在创建最小代码的过程中发现了我的代码中的问题。
问题出在: AddOnsContainer.cpp
void AddOnsContainer::ChangeDefaultSearchProvider(int pId)
{
container[pId]->ChangeDefaultSearchProvider();
}
因为我直接传pId
,需要减1,因为目前我没有使用图形界面,我只使用控制台变体。
但是,由于我花了一些时间来创建我的原始代码的一些最小变化,我决定将它上传到 GitHub 和 link 在 Whosebug 中。
代码可以通过以下方式访问: https://github.com/mariopavlov/C/tree/master/InheritanceExample
再次感谢大家! 最好, 马里奥 P.