【发布时间】:2018-12-11 13:12:27
【问题描述】:
所以我有一个简单的任务要做。从一个基类派生出 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))
}
};
if(std::dynamic_cast... 行会产生编译错误:
syntax error '<', illegal token on the right side of :: 和 expected an identifier
【问题讨论】:
-
if(std::dynamic_cast<Cat*>(a))有什么问题? -
@stetoc 语法错误'dynamic_cast 一致)
-
您不能将对象转换为指针,您需要在动态转换中基本上在
a之前添加&,以便传递对象的地址 -
使用
if(std::dynamic_cast<Cat*>(&a)。
标签: c++ class base-class dynamic-cast