기본 클래스가 있고 가상 메서드 만 있고 의 2 개의 파생 클래스가 있고 이러한 가상 메서드가 구현되어 있습니다.기본 클래스의 배열에 대한 포인터, 파생 클래스로 채우기
은 어떻게 I :
// causes C2259
BaseClass* base = new BaseClass[2];
BaseClass[0] = new FirstDerivedClass;
BaseClass[1] = new SecondDerivedClass;
나 :
// causes "base is being used without being initialized"
BaseClass* base;
// causes CC59 again
BaseClass* base = new BaseClass;
base[0] = FirstDerivedClass();
base[1] = SecondDerivedClass();
(또는 비슷한)
... 나는 DerivedClass
통해 BaseClass
의 방법에 액세스 할 수 있도록 그러나 포인터에 의해 포인터는 DerivedClass
s의 배열입니까?
"object slicing"이라고 불리는이 문제는 배열과 관련이 없습니다. 파생 클래스를 값 *에 의해 기본 클래스 *에 할당 할 때마다 발생합니다. 예 : 'BaseClass b; b = FirstDerivedClass();'는 compileable C++입니다. 그럼에도 불구하고 자동으로 중단됩니다 (기껏해야 컴파일러 경고를받을 수 있습니다). –
링크가 이동 된 것 같습니다. – user6003859
@ user6003859 업데이트했습니다. 감사합니다. – Jon