2017-12-19 16 views
0

이 코드가

Testing with pointer argument: Hello world, I am Derived 
Testing with reference argument: Hello world, I am Derived 
Testing with object argument: Hello world, I am Base 

내 질문은 포인터의 경우 void testPointer(Base *obj)과 기준의 경우 왜 모두입니다 void testReference(Base &obj)void sayHello()의 파생 된 인스턴스의 결과를 반환하고 복사 사례를 통한 패스를 반환 하시겠습니까? 파생 된 클래스 함수 void sayHello()의 결과를 반환하도록 복사 사례를 만들려면 어떻게해야합니까?

+1

"참조로 테스트"는 'testReference' 대신'testObject'를 호출합니다. –

+3

[개체 조각이란 무엇입니까?] 가능한 복제본 (https://stackoverflow.com/questions/274626/what-is-object-slicing) –

+0

@RaymondChen 그 덕분에 참조 사례가 포인터로 작동하고 있음을 알 수 있습니다. 그러나 아마도 copy by pass에는 파생 클래스 함수 구현을 호출 할 방법이 없을 것입니다. – Pekov

답변

1

참조 또는 포인터를 사용하는 함수는 전달 된 원본 객체를 참조하며, by-value 인수는 객체의 복사본을 만듭니다. 베이스 파트 만 복사하기 때문에 기본 파트의 복사본으로 작업하게되고 은베이스가이므로베이스처럼 작동합니다.

이 "기본 전용"복사는 개체의 일부만 복사하여 파생 된 부분을 "조각 내기"때문에 "조각"이라고합니다.