2012-03-02 3 views
0

더 많은 노련한 C++ 코더들에게는 어리석은 질문처럼 보일지 모르지만, 일단 클래스를 만들고 그 클래스의 객체를 만들면, 당신이 만든 객체를 사용하여 그 클래스의 public 메소드를 호출한다고합니다. 정적 메서드입니다.이 경우 객체 또는 클래스 이름 자체를 사용하여 호출 할 수 있습니다.)개체를 사용하지 않고 클래스 메서드를 호출합니까?

그러면 왜 작동합니까?

기능 정의 :

template <typename Object> 
void printList(const List<Object>& theList) { 
    if (theList.isEmpty()) 
     cout << "Empty list!" << endl; 
    else { 
     ListItr<Object> itr = theList.first(); 
     for(; !itr.isPastEnd(); itr.advance()) 
      cout << itr.retrieve() << " "; 
    } 

    cout << endl; 
} 

함수 호출 :

printList(myList); 

내가 여기서 무엇을 놓치고? printList()이라는 객체를 List<int>이라고 부르지 않는 한 나머지 프로그램은 이 클래스 List<int>에 속한다는 것을 어떻게 알 수 있습니까?

이 방법도 효과가 있습니다. 방금 확인했습니다. 나는이 기능을 호출하고 정의하는 방법을 사용했을 것이다. 이번에는 함수가 this 포인터를 사용하여 정의되었다는 점을 유의하십시오.

기능 정의 :

template <typename Object> 
void List<Object>::printList() { 
    if(this->isEmpty()) 
     cout << "Empty list!" << endl; 
    else { 
     ListItr<Object> itr = this->first(); 
     for(; !itr.isPastEnd(); itr.advance()) 
      cout << itr.retrieve() << " "; 
    } 

    cout << endl; 
} 

함수 호출 :

myList.printList(); 
+1

'나머지 프로그램에서는 printList()가 List '클래스에 속해 있다는 것을 어떻게 알 수 있습니까? 'List '을 매개 변수로 사용하는 이유는 무엇입니까? 나에게 당신이 멤버 함수가 아닌 자유 함수를 만든 것처럼 보입니다 ... 특히 두 번째 예제에서 멤버 함수를 만들 때,이 함수를 수행하는'List ::' 클래스 정의 외부의 정의. –

+0

왜냐하면 그것은 클래스의 메소드가 아니기 때문입니다. 그것은 단순한 기능입니다. –

+0

고마워요. 저는 그것을 고치고 첫 번째 것을 멤버 함수로 만들었습니다. 이제는 호출 할 수있는 객체가 필요합니다. 여전히 'this'를 사용하여 동일한 작업을 수행 할 수있을 때 매개 변수로 전달 된 객체가 필요한 이유가 이상하게 보입니다. – Ambidextrous

답변

0

귀하의 이해가 정확합니다. List<>에 대해 중요한 것을 알려주지 않았거나 책에서 중요한 교훈을 놓치지 않았다면, 두 번째 예가 첫 번째 예보다 분명히 우월합니다.

왜이 조각은 객체 자체를 전달해야합니까?

이렇게 코딩되어 있기 때문입니다. 진지하게, 당신은 아마 당신의 책의 저자 인 그 코드를 저자에게 물어야 할 것입니다.

무엇이 여기에 있습니까?

두 예제는 동일하지 않습니다. 첫 번째 방법은 "List<> 두 개, ab 두 개를 입력 한 경우 에 b : a.printList(b)"의 내용을 인쇄하도록 요청하십시오. 하나 List<>, a 주어진 두 번째 구현은 "자체의 내용을 인쇄 a 물어 :.. a.printList()

이 책의 저자는 바로 그 차이를 설명하려고하는 것이 가능하다 나는 그들이하려고하는 모르겠어요 쇼, 나는 책을 읽을 수있다. 당신은 내가 위의 2 차 목표를 달성하기 위해 노력하는 경우

왜 단지 즉 List 자체를 인쇄 할 수?

this를 사용하지, this을 사용해야합니다.

1

여기 어둠 속에서 총을 복용하지만 T의 멤버 함수로 다음과 같은 기능을 기대하고있다?

void print(const T& someT); 

아니야. 그냥 T 걸리는 무료 함수입니다. 다음


클래스 정의와 멤버 함수 선언입니다 (아마 완전히 중복 인수 걸리기 때문에 멤버 함수는 바보지만) :

struct T { 
    void print(const T& someT); 
}; 

을 그리고 다음은 바보 같다

void T::print(const T& someT) { 
    // ... 
} 

그것은 entir 아니에요 : 멤버 함수는 아웃 오브 라인 정의 첫 번째 질문은 확실히 이 아니며 멤버 기능입니다.

+0

고마워 - 그것을 고치고 회원으로 만들었습니다 - 제 질문을 다시 말해야합니다. 이제는 호출을하기 위해 객체가 필요합니다. 여전히 'this'를 사용하는 메소드는 충분합니다. – Ambidextrous

관련 문제