gpt4 book ai didi

c++ - 为什么 dynamic_cast 是邪恶的还是不邪恶的?在这种情况下我应该使用 dynamic_cast 吗?

转载 作者:可可西里 更新时间:2023-11-01 17:08:56 30 4
gpt4 key购买 nike

有人说the use of dynamic_cast often means bad design and dynamic_cast can be replaced by virtual functions

  1. 为什么使用 dynamic_cast 被认为是糟糕的设计?
  2. 假设我有函数名称 func(Animal* animal, int animalType) , func 中的实现如下:

    bool func(Animal* animal, int animalType)
    {
    ...
    /* Animal is the base class of Bear, Panda, Fish ....
    dynamic_cast animal to real animals(Bear, Panda, Fish...)
    according to animalType. Do some processing with this specific
    type of animal, using its additional information beyond base
    class Animal. */
    }

这种情况是否正确使用了 dynamic_cast

最佳答案

这正是使用 dynamic_cast 的错误地方。您应该使用多态性。每个 Animal 类都应该有一个 virtual 函数,比如 process 在这里你应该调用 animal->process()

class Animal {
virtual void Process() = 0;
}

class Cat : public Animal {
void Process() { std::cout << " I am a tiny cat"; }
}

class Bear : public Animal {
void Process() { std::cout << "I am a big bear"; }
}

void func(Animal * animal) {
if (animal != nullptr) { animal->Process(); }
}

其他问题。

如果 animalDog,但由于错误 animal_type 说它是 Cat 怎么办?

有些时候 static_cast 是必要的,如果可能的话用它代替 dynamic_cast。动态转换具有静态转换没有的额外性能成本。为此,您需要确保知道传入的类型,因为 static_cast 更不安全。

非常至少,animal_type 应该是Animal 的成员。

关于c++ - 为什么 dynamic_cast 是邪恶的还是不邪恶的?在这种情况下我应该使用 dynamic_cast 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18439380/

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