将基类对象强制转换为派生类
Cast base class object to derived class
假设我有两个类,动物和狗。
class Animal
{
};
class Dog : public Animal
{
};
我有一个叫动物的动物对象,它实际上是狗的一个实例,我怎么把它扔回狗?这似乎是一个奇怪的问题,但我需要它,因为我正在编写一个编程语言解释器,并且在堆栈上所有内容都存储为 BaseObject,所有其他数据类型都扩展了 BaseObject。 如何将堆栈中的基本对象强制转换为特定数据类型? 我试过这样的事情
Dog dog = static_cast<Dog>(animal);
但它给了我一个错误
1>------ Build started: Project: StackTests, Configuration: Debug Win32 ------
1> StackTests.cpp
1>c:usersownerdocumentsvisual studio 2012projectsstacktestsstacktestsstacktests.cpp(173): error C2440: 'static_cast' : cannot convert from 'Animal' to 'Dog'
1> No constructor could take the source type, or constructor overload resolution was ambiguous
1>c:usersownerdocumentsvisual studio 2012projectsstacktestsstacktestsstacktests.cpp(173): error C2512: 'Dog' : no appropriate default constructor available
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
编辑:我决定改用指针。
使用 dynamic_cast:
Animal& animal = getAnimalFromStack();
if(Dog *d = dynamic_cast<Dog*>(&animal))
{
// You have a dog pointer, use *d ...
}
相关文章:
- 存储模板类型以强制转换回派生<T>
- 在 C++ 中将对象转换为派生类型
- 从基类实例调用派生类方法而不进行强制转换
- 从基指针到派生的强制转换问题
- C++将派生类转换为基类时'object slicing'期间发生的情况
- 派生类(构造函数具有参数)和基类(构造函数缺少参数)之间没有可行的转换
- C ++基础私有方法在将自身转换为派生类后可以访问吗?
- 调用不在基类中的派生类函数而不进行动态强制转换,以最大程度地提高性能
- 在将派生类指针类型转换为派生类指针后,从基类指针调用派生类函数
- 我们可以在不知道其真实类型的情况下将基类指针转换为派生类指针吗?
- 为什么从基转换为派生提供此功能?
- 将基本实例指针强制转换为派生实例指针是否合法?(实例不是派生实例)
- 从从该抽象类派生的 Python 对象强制转换C++抽象类C++
- 基类到派生类的强制转换向量
- 有没有办法复制派生类指针的向量而不将其强制转换为基类?
- 为什么此代码不将基类强制转换为 c++ 中的派生类?
- 如何在运行时将指向派生类的 void* 正确转换为指向基类的 void*
- 从基类的共享指针向下转换到派生类的引用
- 为了访问方法,从基类动态转换为派生类
- 如何将矢量<派生*>转换为矢量<Base*时避免复制>