오브젝트 슬라이싱이 뭔가요?

어디서 들어봤는데 찾아보니까 안 나와요 object slicing이 뭐에요?

1답변

  • 좋아요

    0

    싫어요
    채택취소하기

    슬라이싱은 자식클래스 오브젝트를 부모클래스의 오브젝트에 할당하는겁니다.

    예를들어 다음과 같이 쓰는 경우이지요. Base* baseptr = new Child()

    좀 더 자세히 보겠습니다.

    using namespace std;
    
    class Base {
    public:
        void printBase(){
            cout << "print Base" << endl;
        }
    };
    
    class Child : public Base {
    public:
        void printChild(){
            cout << "print Base" << endl;
        }
    
    };
    
    int main()
    {
        Child *childPtr = new Child();
        Base *basePtr = childPtr;
    
        cout << "childPtr : " << childPtr << ", basePtr : " << basePtr << endl;
        childPtr->printBase(); //가능
        childPtr->printChild(); //가능
    
        basePtr->printBase(); //가능
        //basePtr->printChild(); //불가능
    
    }
    
    childPtr : 0x100100e20, basePtr : 0x100100e20
    print Base
    print Child
    print Base
    Program ended with exit code: 0
    

    basePtr은 분명 childPtr과 같은 객체를 가리키고 있지만 basePtrChild에 대한 정보를 잃어버립니다.

    이와 같이 자식 클래스의 어트리뷰트를 온전히 다 쓸수 없기 때문에 잘려나갔다는 의미에서 slicing이라고 표현 하지요.

ᕕ( ᐛ )ᕗ
로그인이 필요합니다

작성한 답변에 다른 개발자들이 댓글을 작성하거나 댓글에 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.