>

먼저 부모 클래스의 객체를 만들고 싶습니다. 조건에 따라 자식 클래스의 자식 객체를 만들어서 부모 객체에 넣습니다. 이제 객체를 일부 함수에 전달한 후 해당 함수는 하위 클래스 메소드에 액세스해야합니다. 설명 코드를 참조하십시오.

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
}


  • 답변 # 1

    <올>

    개체 대신 포인터를 사용하십시오.

    Parent* ptr = nullptr;
    if(cond){
        ptr = new Child();
    }
    if ( ptr )
    {
       do_something(*ptr) // pass the child obj
    }
    
    

    와이즈 비즈 변경  객체가 아닌 참조를 사용합니다. 인수가 객체의 값으로 전달되면 프로그램에서 objct-slicing 문제가 발생합니다.

    do_something
    
    

    와이즈 비즈 변경   void do_something(Parent& obj){ .... } 에 전화  전달 된 객체에서.

    do_something
    
    

    f()

관련 자료

  • 이전 routes - 스프링 부트 - 코드 에서이 bean을 찾을 수있는 곳 콩인가요?
  • 다음 Swift - 빠른 - 함수에서 프로토콜 메소드를 구현하는 방법