动态投射子类
Casting children classes dynamically
我有以下类:
class Base{
public:
virtual int do_Something();
};
class ChildA : public Base {
public:
int do_Something(); // ChildA does something
};
class ChildB : public Base {
public:
int do_Something(); // ChildB does something
};
总的来说.cpp我想根据用户设置的特定配置创建一个对象ChildA()
或ChildB()
。 我在函数main()
中的尝试是:
...
int config = 1; // selected by the user
Base* classe;
std::cout<<typeid(classe).name() << std::endl; // check class name
if (config==0){
classe= new ChildA();
}
else if (config==1){
classe= new ChildB();
std::cout<<typeid(classe).name() << std::endl; // check class name
}
...
问题
我希望印刷的名称会有所不同。相反,输出是:
P4Base
P4Base
这里的问题是classe
(Base *
(不是多态的。这是一个简单的指针。您可以在输出中看到它。在带有GCC的Linux上,它是:P4Base
,指向Base
的指针
你想要的是typeid(*classe).name()
.输出为6ChildB
、ChildB
类型的对象。
多态性不会更改指针的类型(静态类型或动态类型(,但会更改对象的动态类型。
评论// check class name
是错误的。该行
std::cout<<typeid(classe).name() << std::endl;
不检查类,而是检查指针。
相关文章:
- 继承期间显示未知行为的子类
- 通过指向指针数组的指针访问子类的属性
- 从父类方法返回子类对象
- c++, 在子类中,如何在没有对象的情况下访问父类的方法?
- 将父类对象强制转换为子类的问题
- 避免在C++中重复子类定义
- 将QOpenGLWidget子类转换为使用Metal而不是OpenGL的子类是否可行?
- 如何初始化矢量的模板化子类
- C++ 继承:将子类传递给需要基类的函数并获取子类行为
- 有没有办法按值将纯抽象类的所有子类传递给 C++ 中的函数?
- 使用子类覆盖基类中定义的函数
- 子类地址等于虚拟基类地址?
- 将子类方法声明为基类的友元
- C++子类共享变量?
- 如何检查模板专用化是否是基本模板的子类?
- 动态投射子类
- 具有模板的树类,并为子级动态分配
- 如何在Qt中处理子类中的动态内存分配
- 通过"a pointer of the base class"访问未在基类中声明的子类的方法或属性(动态)
- 当对象不是动态分配的(不是指针)时,是否可以从超类对象转换到子类