gpt4 book ai didi

c++ - 使用函数而不是巨大的 if 语句向下转换指针

转载 作者:搜寻专家 更新时间:2023-10-31 00:21:55 25 4
gpt4 key购买 nike

我有一个带有 Vehicle 类型指针的 vector 。 Vehicle 是基类,还有许多派生类型,如 MotorCycle、Car、Plane 等。现在,在我的程序中,有一点我在遍历 vector 时需要派生类型。每个 Vehicle 类都有一个 GetType() 函数,它返回一个 int,告诉我派生类型是什么(motorcylce、car、plan)。因此,我可以使用动态转换从基类指针向下转换为派生类型。但是,每次我需要派生指针时,我都需要一个巨大的 if 语句

if(vehicle_ptr->GetType() == PLANE)
Plane *ptr = dynamic_cast<Plane*> vehicle_ptr;
else if (vehicle_ptr->GetType() == MOTORCYCLE)
MotorCycle *ptr = dynamic_cast<MotorCycle*> vehicle_ptr;
..and on and on.

有没有一种方法可以调用一个函数或一些技巧,使我免于到处都是巨大的 if 语句?像::GetDerivedPtr(Vehicle *ptr)。模板类在这里有帮助吗? (以前从未使用过它们)抱歉,我的 C++ 有点生疏,我确实进行了搜索,但是这些术语提供了太多的 Material ,无法找到我要找的东西。谢谢。

最佳答案

看起来您已经手动尝试重新创建多态性。您不需要类型成员。这几乎总是一个坏主意。使用多态和虚函数。

当你有一个车辆指针 v 并且做

v->function();

如果函数是虚函数,它将为指针实际指向的任何类型(飞机、火车或汽车)调用适当的函数。你正在做的事情已经由语言处理了。

所以:

class A {
public:
virtual void f() {cout << "A";}
};

class B : public A {
public:
virtual void f() {cout << "B";}
};

int main(){
A *a;
B b;
a = &b;
a->f();
}

上面的代码片段将打印 B。

关于c++ - 使用函数而不是巨大的 if 语句向下转换指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3952464/

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