gpt4 book ai didi

c++ - 将基类转换为派生类还是在基类上创建虚函数更好?

转载 作者:太空狗 更新时间:2023-10-29 20:37:37 26 4
gpt4 key购买 nike

根据这个answer , dynamic_cast 将基类转换为派生类没问题,但他说这表明代码逻辑存在根本问题。

我看过其他答案,使用 dynamic_cast 没问题,因为您可以稍后检查指针的有效性。

现在在我的实际问题中,派生类有一个 GetStrBasedOnCP 函数,它不是虚拟的(只有派生类有它),我必须访问它。

更好的是,在基类上创建一个 virtual void GetStrBasedOnCP 并在派生 OR 上使其成为 virtual,仅将基类指针转换为派生类?

哦,还要注意这是一个 unsigned int GetStrBasedOnCP 所以基类也必须返回一个值...

最佳答案

“什么更好”这个问题有两个以上的答案,这完全取决于您建模的对象:

  • 如果 GetStrBasedOnCP 函数在逻辑上适用于基类,则使用虚拟分派(dispatch)是最佳方法。
  • 如果在基类中使用 GetStrBasedOnCP 函数在逻辑上没有意义,您需要使用基于实际类型的方法;你可以使用dynamic_cast,或者
  • 您可以实现多重分派(dispatch),例如通过访问者或通过动态类型的 map

逻辑适用性测试是最重要的测试。如果 GetStrBasedOnCP 函数特定于您的子类,将其添加到基类会给使用和维护您的代码的开发人员带来维护难题。

另一方面,多重分派(dispatch)为您提供了一种灵活的方法,让您可以访问静态类型的对象。例如,实现 visitor pattern在您的基类中,您可以让使用 GetStrBasedOnCP 函数处理子类的访问者不同于其他子类。

关于c++ - 将基类转换为派生类还是在基类上创建虚函数更好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34293199/

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