如何在 cpp 运行时类型转换和创建对象?
How to typecast and create object in runtime in cpp?
我想先创建父对象 class 的对象,然后根据某些条件创建子对象 class 的子对象并将其放入父对象中。现在,在将对象传递给某个函数后,该函数需要访问子 class 方法。请参阅代码以进行说明。
class Parent {
virtual f(){
print('Parent');
}
}
class Child: public Parent{
virtual f(){
print('Child')
}
}
void do_something(Parent &obj){
obj.f(); // this will print Child
}
int main(){
Parent obj;
if(cond){
// This is my actual question
// Not sure how to create a child obj here and put it into parent obj
Child obj = dynamic_cast<Child>(obj);
}
do_something(obj) // pass the child obj
}
使用指针而不是对象。
Parent* ptr = nullptr;
if(cond){
ptr = new Child();
}
if ( ptr )
{
do_something(*ptr) // pass the child obj
}
更改 do_something
以使用引用,而不是对象。当参数通过对象的值传递时,程序会遇到 objct-slicing problem.
void do_something(Parent& obj){
....
}
更改 do_something
以在传递的对象上调用 f()
。
void do_something(Parent& obj){
obj.f();
}
我想先创建父对象 class 的对象,然后根据某些条件创建子对象 class 的子对象并将其放入父对象中。现在,在将对象传递给某个函数后,该函数需要访问子 class 方法。请参阅代码以进行说明。
class Parent {
virtual f(){
print('Parent');
}
}
class Child: public Parent{
virtual f(){
print('Child')
}
}
void do_something(Parent &obj){
obj.f(); // this will print Child
}
int main(){
Parent obj;
if(cond){
// This is my actual question
// Not sure how to create a child obj here and put it into parent obj
Child obj = dynamic_cast<Child>(obj);
}
do_something(obj) // pass the child obj
}
使用指针而不是对象。
Parent* ptr = nullptr; if(cond){ ptr = new Child(); } if ( ptr ) { do_something(*ptr) // pass the child obj }
更改
do_something
以使用引用,而不是对象。当参数通过对象的值传递时,程序会遇到 objct-slicing problem.void do_something(Parent& obj){ .... }
更改
do_something
以在传递的对象上调用f()
。void do_something(Parent& obj){ obj.f(); }