返回返回基本或派生CLSS指针的功能值
Return value of function that returns either base or derived clss pointer
给定以下代码中显示的类的关系:
class Base
{
virtual getValue() { return 0; }
};
class Derived: public Base
{
getValue() override { return 1; }
};
class Another
{
Base* makeClass( bool );
void createVector();
};
Base* Another::makeClass( bool base )
{
if( base )
{
return new Base();
}
else
{
return new Derived();
}
}
void Another::createVector()
{
std::vector<Base> vector;
vector.emplace( *makeClass( false ) );
std::cout << vector[0].getValue();
}
为什么它打印0
而不是1
?添加到向量时,它是否将Derived*
转换为Base
?
"当添加到向量时,它是否将Derived*
转换为Base
?"是的。
在
中vector.emplace( *makeClass( false ) );
*makeClass( false )
将指针返回并将其切成 Base
。此Base
存储在vector
推荐阅读:什么是对象切片?
解决此问题,
std::vector<Base *> vector; // but watch out for Cylons
vector.emplace( makeClass( false ) );
std::cout << vector[0]->getValue();
或更好的是,研究std::unique_ptr
并使智能指针内存管理为您工作。
相关文章:
- 时钟功能返回零时差
- C++链表删除和删除返回功能
- 返回状态后,功能不会结束
- C++自动功能返回?
- 确定功能主体中的返回类型
- STL查找功能从Deque返回了什么
- 返回类型不可知模板类成员功能
- 类型推论模板功能返回类型
- 使用具有返回功能的函数
- 无法从Linux,C ++执行"my_script" python脚本"main(filename)"功能;pModule = PyImport_Import(pName);返回空值
- 单位测试QT中的非返回功能
- Python C API-返回功能超载中的不同类型
- 正确施放以指向返回功能的函数的功能指针
- 自动返回功能和模板实例化
- 二次代数建议数组等返回功能
- 如何检查正确操作数以通过参考返回功能
- 字符串返回功能不起作用 - 'identifier is underfined'
- C 返回功能lock_guard
- 返回功能的使用不当
- Python的None返回功能模仿C++