2016-09-27 7 views
-4

이 주제에 대한 재교육이 필요하지만 온라인에서 답변을 찾을 수는 없습니다.C++ - 클래스가있는 네임 스페이스

당신이 클래스를 호출 한 경우 Dog

class Dog 
{ 
public: 
    void Dog::woof() 
    { 
     return; 
    } 
}; 
  • 머스트 Dog::Dog 시작 내부의 모든 단일 기능? 그것이 내가 항상 해왔 던 방법이지만, 나는 묻고 싶다. 어떤 경우에도 그렇지 않다면 상황? Dog::을 넣지 않으면 Java의 정적 메서드처럼 사용할 수 있다는 의미입니까? 전의. 대신 myDogObj.woof();

  • Dog.woof(); 우리가 Dog 네임 스페이스없는 경우에도 불구하고, :: 연산자를 사용 WoofDog의 네임 스페이스에 있음을 의미한다는 사실을합니까? 그것이 사실이라면 클래스가 자동으로 네임 스페이스로 자신을 생성한다는 것을 의미합니까?

  • 왜 우리가 class Dog의 내부에 있다는 바로 그 사실은 본질적으로 이미한다고하면서 Dog에 속하는 방법 있다는 ++ C에게 Dog::을 배치해야합니까? 그렇게 중복되지 않습니까?

  • 어쨌든 Dog::woof이 네임 스페이스 또는 중첩 네임 스페이스 내부에서 선언 될 수 있습니까? 전의. Park::Trail::Dog::woof() { return; }

당신은해야 할 것이다 :

class Dog 
{ 
public: 
    namespace Park 
    { 
     namespace Trail 
     { 
      void Dog::woof() 
      { 
       return; 
      }  
     } 
    } 
}; 
+3

마지막 예제는 말도 안되며, 클래스의 * 내부에 네임 스페이스를 가질 수 없습니다. – molbdnilo

+0

클래스에서'woof'를 선언 한 다음 클래스 외부에서 정의 할 수 있지만 그 함수 정의를 네임 스페이스 안에 넣으면 어떨까요? 전의. '네임 스페이스 Park {void Dog :: woof() {return; }}' – Hatefiend

+1

'Dog' 선언이'Park' 네임 스페이스 안에 있지 않으면 작동하지 않습니다. 재스는 그것을 시험해 본다. – Ceros

답변

2

개 내부의 모든 단일 기능은 강아지와 함께 시작해야합니다 ::? That 's how 나는 항상 그랬지만 어떤 상황이 있는지 물어보고 싶습니다. 그런 경우가 아닙니까? Dog :를 넣지 않으면 : 은 Java의 정적 메소드처럼 사용할 수 있습니까? 전의. Dog.woof(); 대신 myDogObj.woof();

아무 방법도 클래스 정의 안에서 Dog::으로 시작해야하며 그 밖에는 정의가 없습니다.

사실 우리가 :: 연산자를 사용한다는 사실은 Dog가 네임 스페이스가 아니더라도 Woof가 인 Dog의 네임 스페이스에 있다는 것을 의미합니까?이 참이라면 클래스가 자동으로 네임 스페이스로 자신을 생성한다는 의미입니까?

예, 범위는 Dog입니다. 이 클래스 개 내부에 있다는 바로 그 사실은 본질적으로 이미 을 언급하면서

왜 우리는 개 에 속하는 방법 있다는 ++ C에게 개를 :: 배치해야합니까? 그렇게 중복되지 않습니까?

네, 그렇게하지 않은 이유입니다.

+0

'Dog Dog' 내부의 메소드를 정의 할 수 있습니다. 'Dog' 외부에서 정의하는 그 메소드는'Dog'와 같은'cpp' 파일에 있어야합니까? – Hatefiend

+0

@Hatefiend 당신은 Dog 내부에 선언하고 다른 곳에서는 정의 할 수 있습니다. 아닙니다. –

+0

외부를 선언하고 정의 할 수있는 방법이 있습니까? 아니면 외부에서만 정의 할 수 있습니까? (나는 추측하고있다.) – Hatefiend