Mel*_*oks 0 c++ dynamic-cast class base-class
所以我有一个简单的任务要做.从一个基类派生出3个类.它们非常简单,将在下面提供.我需要做的是创建一个名为的新类PolymorphicAnimal,它将能够像animal从Animal基类派生的任何其他类一样运行.确切地说,他们需要做的就是在SoundOff调用方法后显示正确的文本.我猜我需要在dynamic_cast这里使用.我的问题是,什么是使用正确的语法dynamic_cast作为一个if声明,并尽一切派生类需要有至少一个虚拟方法呢?
#include "stdafx.h"
#include <iostream>
#include <string>
class Animal {
public:
virtual std::string SoundOff() = 0;
};
class Dog : public Animal {
std::string SoundOff() override { return "Woof"; }
};
class Cat : public Animal {
std::string SoundOff() override { return "Meow"; }
};
class Cow : public Animal {
std::string SoundOff() override { return "Muu"; }
};
class PolymorphicAnimal : public Animal {
std::string sound;
public:
PolymorphicAnimal(const Animal &a) {
if(std::dynamic_cast<Cat*>(a))
}
};
Run Code Online (Sandbox Code Playgroud)
该行if(std::dynamic_cast...生成编译器错误:
syntax error '<', illegal token on the right side of :: 和 expected an identifier
Bat*_*eba 10
在 C++ 中,您可以在 an 的条件中声明变量if,这是您可以在此处利用的强大功能。所以,
if (auto kitty = dynamic_cast<const Cat*>(&a)){
// kitty is not nullptr
}
Run Code Online (Sandbox Code Playgroud)
笔记:
dynamic_cast是一个关键字;做删除std::dynamic_cast。引用替代方案是不切实际的,因为通常不能期望引用类型到类型的隐式转换bool,并且如果引用强制转换失败,则会引发异常。