gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:50:34 25 4
gpt4 key购买 nike

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

插件容器.h

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

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

加载项.h

virtual void ChangeDefaultSearchProvider();

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

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

SearchProviders.h

virtual void ChangeDefaultSearchProvider() override final;

我从这里调用方法:

插件容器.cpp

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

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

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

提前谢谢大家!

最好的问候,马里奥 P.

附言

这是我将项目(SearchProviders)添加到 vector 的代码:

SearchProvider searchProviders;

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

最佳答案

谢谢大家的帮助!

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

问题出在:加载项容器.cpp

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

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

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

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

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

关于C++基类和派生类方法的麻烦,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29766872/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com