2014-07-20 1 views
0

두 클래스, BaseChild이 있다고 가정 해 봅시다. ChildBase을 상속합니다. ValueBase에 정의 된 상수 변수 (또는 enum 값)이므로 Base::Value으로 액세스 할 수 있습니다.기본 클래스 또는 하위 클래스를 사용하여 기본 클래스에 정의 된 enum 값/상수에 액세스해야합니까?

이제 우리는 Child 유형의 일부 변수를 다루고 있습니다. 대부분의 문서 및 샘플 코드에서 사람들은 Child 인스턴스를 처리하지만 Child::Value 대신 Base::Value을 사용하는 경향이 있습니다. 예를 들어, Qt 라이브러리에는 QIODeviceQBuffer (나중에는 이전의 자식입니다)이고 QBufferopen 메서드를 가지고 있습니다. 문서는 buffer.open(QBuffer::ReadWrite, ...); 대신에 buffer.open(QIODevice::ReadWrite, ...);과 같은 것을 사용하는 경향이 있습니다. 여러분 모두가 자주 보았다고 생각하는 많은 다른 예가 있습니다.

사람들이 왜 그 값에 액세스하는 데 기본 클래스를 사용하는지 궁금해합니다. 때로는 어떤 클래스가 정의 된 값인지 확실하지 않을 수 있으며 더 중요한 것은 자식 클래스는 기본 클래스에 정의 된 값을 무시할 수 있습니다. 현재 클래스 (WhateverClassBeingUsed::Value)를 통해 상수 값에 액세스하는 것이 가장 좋지 않습니까? 사람들은 때때로 우리가 클래스 값을 정의하고, 더 중요한 것은, 그것이 인 확실히 알 수 없기 때문에, 그 변수에 접근하기 위해 기본 클래스를 사용하는 경향이 왜

답변

1

나는 조금 궁금 해요 가능하면 하위 클래스는 기본 클래스 에 정의 된 값을 대체 할 수 있습니다. 물론

하지만,이 두 가지 시나리오를이 무시 무시하게 나쁜 코드이고, 당신이 그들을 피하기 로합니다. 열거 형의 값을 무시할 수는 없으며 우연히 이름이 지정된 열거 형 만 정의 할 수 있습니다. 그것은 완전히 다른 유형이며 컴파일되지 않습니다.

정의 된 클래스를 확실히 알지 못하면 구현 세부 사항에만 유용합니다 ... 사용자는 사용할 클래스를 알아야만 알아 낸 후 사용합니다.

열거 형이 정의 된 클래스를 사용하면 실제 손실이 없습니다.

+0

파생 된 이름이 기본 이름을 숨기므로 [컴파일] (http://coliru.stacked-crooked.com/a/ecd55fb76fd6a91b) 않습니다. 그러나 그렇습니다, 그것은 끔찍합니다. –

+0

@ T.C .: 다른 기능으로 전달하는 부분을 잊어 버렸습니다. [작동하지 않음] (http://coliru.stacked-crooked.com/a/dc16484c422657a3). – Puppy

+0

이름이 변경 되었습니까? : -S –

관련 문제