문제

내가 들어 있는 C++에서 사용하여 접근자( get...() 에서)회원의 기능은 동일한 클래스는 접근자 정의되었다는 것이 바람직한 프로그래밍 방식?그것은 진실하고 수행되어야 하는가?

예를 들어,이것이 선호:

void display() {
    cout << getData();
}

을 통해 무언가가 다음과 같다:

void display() {
    cout << data;
}

data 은 데이터 구성원의 동일한 클래스는 접근이 정의되었...동 display() 방법입니다.

나는 생각한 오버헤드는 일을 위해 특별히 필요하신 경우에는 호출은 접근 많은 시간 내에 동일한 클래스 오히려 그냥 데이터를 사용하여 회원이 직접 있습니다.

도움이 되었습니까?

해결책

그 이유는 구현을 변경하면 getData(), 직접 액세스하는 나머지 코드를 변경할 필요가 없습니다. data.

또한 스마트 컴파일러는 어쨌든 IT를 인화 할 것입니다 (클래스 내부의 구현을 항상 알고있을 것입니다). 성능 페널티가 없습니다.

다른 팁

때에 따라 다르지. 액세서 기능을 사용하면 추상화 계층이 제공되어 미래의 '데이터'를 덜 고통스럽게 변경할 수 있습니다. 예를 들어, '데이터'의 값을 게으르게 계산하려면 액세서 기능에서 해당 계산을 숨길 수 있습니다.

오버 헤드의 경우 - 성능 오버 헤드를 언급하는 경우에는 무의미 할 것입니다. 액세서리는 거의 확실하게 감소 할 것입니다. 코딩 오버 헤드를 언급하는 경우 그렇습니다. 트레이드 오프이며 액세서리를 제공하기 위해 추가 노력을 기울일 가치가 있는지 결정해야합니다.

개인적으로, 나는 접근자들이 대부분의 경우 그만한 가치가 있다고 생각하지 않습니다.

예, 나는 그것이 무조건적으로 수행되어야한다고 생각합니다. 상태 변수가 일부 기본 클래스 인 경우 항상 개인이어야합니다. 보호하거나 공개적으로 허용하는 경우 모두 상속 ~ 할 것이다 직접 사용하십시오. 이러한 수업은 차례로 동료가 다른 프로젝트에서 작성한 수업 일 수 있습니다. 기본 클래스에서 갑자기 조롱하고 변수 이름을 더 적합한 것으로 확인하기로 결정한 경우 해당 상태의 모든 사용자를 다시 작성해야합니다.

당신이 유일한 프로그래머이거나 아무도 사용할 코드를 개발하는 경우 문제가되지 않을 것입니다. 그러나 하위 클래스의 수가 증가하기 시작하자마자 실제로 털이 발생할 수 있습니다. 투명성을 사랑해야합니다!

그러나 나는이 지구상에서 신의 최고의 아이가 아닙니다. 때때로 나는 속임수;) 당신이 소유자 수업에있을 때, 나는 개인 데이터에 직접 액세스해도 괜찮다고 생각합니다. 실제 클래스를 수정하고 있다는 것을 자동으로 알고 있기 때문에 유익 할 수도 있습니다. 실제로 당신에게 실제로 알려주는 일종의 이름 지정 규칙이 있다는 점을 감안할 때, 예를 들어 마지막에 밑줄이있는 가변 이름 : "somevariable_. ".

건배 !

Khunt 씨, 오버 헤드는 대부분의 경우 접근자에게는 중요하지 않습니다. 문제는 액세서 로직을 호출 할 필요가 없거나 현장에 직접 액세스 해야하는지 여부입니다. 이것은 각 개별 구현에 대한 질문이지만 많은 경우에 큰 차이를 만들지는 않습니다.

접근자의 진정한 이유는 다른 클래스에 필드를 캡슐화하고 포함 된 클래스에 대해서는 덜 캡슐화하기 때문입니다.

개인적으로, 나는 수십 개의 추가 기능을 갖지 않는 것을 선호합니다 (모든 멤버 변수별로 GET 및 SET). 나는 그냥 사용할 것입니다 데이터, 그리고 변화 할 것입니다 getData () 다른 일을해야 할 때만. 우리는 한 클래스에서만 코드를 변경하는 것에 대해 이야기하고 있기 때문에 너무 어렵지 않아야합니다.

그것은 내가 생각하는 데이터 구성원과 궁극적으로 무엇을 할 수 있는지에 달려 있습니다.

액세서로 마무리하면 비싼 프로세스이고 누군가가 요구하지 않는 한하고 싶은 일이 아니라면 데이터를 게으르게 검색하는 것과 같은 작업을 수행 할 수 있습니다. 반면에 당신은 그것이 항상 멍청한 내장 유형 일 것이라는 것을 알 수 있으므로 액세서를 통과 할 수 있다는 이점을 볼 수 없습니다. 내가 말했듯이, 그것은 회원에 따라 다릅니다.

내 마음,가장 중요한 측면의 이 질문에 그것은 코드를 읽기 쉽고,따라서 유지 보수가?개인적으로 생각하지 않는 그래서 나는이 작업을 수행 할 것입니다.
확실히 추가해서는 안 됩니다 개인 접근 그냥 이렇게 하는 것 cnuts.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top