2013-10-27 2 views
3

예를 들어,네임 스페이스 식별자가 모든 매개 변수 앞에 있어야합니까?

Matrix.h는

namespace Matrix 
{ 
    class mat 
    { 
    public: 
     mat(int row, int col); 
     const mat &operator=(const mat &rhs); 
    } 
} 

Matrix.cpp

Matrix::mat::mat(int row, int col) 
{ // implementation here } 

const Matrix::mat &Matrix::mat::operator=(const mat &rhs) 
{ // implementation here } 

위 코드는 문제없이 컴파일됩니다. 문제는 앞에서 const mat operator=(const Matrix::mat &rhs);
const Matrix::mat Matrix::mat::operator=(const Matrix::mat &rhs)과 같은 네임 스페이스 식별자를 앞에 붙여야합니까? 왜 그렇게하는 컨벤션 방법이며 식별자를 추가하지 않고 컴파일하는 이유는 무엇입니까?

+1

이러한 방법으로 "namespace Matrix {...}"를 사용하거나 그렇게 할 수 있습니다. 나는 후자를 선호한다. – memo1288

답변

2

그냥

Matrix.cpp

namespace Matrix { 

    mat::mat(int row, int col) 
    { // implementation here } 

    mat& mat::operator=(const mat &rhs) 
    { // implementation here } 

} //namespace Matrix 
1

이 순전히 완전히 개인적인 스타일 환경입니다 네임 스페이스에 코드를 정의합니다. 나는 지난 10 년 동안 그 스타일을 선호했던 많은 사람들과 일 해왔다. 하지만 대부분의 사람들은 다른 방법을 선호합니다.

이 규칙을 사용하는 프로젝트에서 작업하는 경우 일관성을 유지하고 동일하게 수행하십시오. 그렇지 않으면 당신이 좋아하는 일을하십시오. 그러나 질문에 설명 된 스타일을 사용하면 같은 스타일 환경 설정을 공유하는 사람들을 찾는 데 도움이되지 않을 수 있음을 명심하십시오.

대개 @billz가 그의 예제에서 보여준 것처럼 사람들이 일반적으로하는 일은 declarion과 동일한 네임 스페이스 안에 정의를 넣는 것입니다. 또 다른 방법은 using namespace Matrix;Matrix.cpp 파일의 맨 위에 (헤더가 아닌) 넣어 클래스 정의를 제공하는 것입니다.하지만이 방법은 다소 덜 명확하고 펑키 한 방식 인 IMHO입니다.

희망이 도움이됩니다. 행운을 빕니다! :)

+2

잠재적 인 문제를 완화하기 위해서 :'namespace Matrix 사용하기 '는'Matrix.cpp'의 꼭대기에서만 이루어져야합니다. ** 절대 헤더 파일에'using namespace' 선언을 두지 마십시오. –

+1

@ZacHowland : 그렇습니다. 그러나 당신이 그것을 원할지도 모르지만, 글로벌 스코프가 아닌 경우도 있습니다. 내 스타일 환경 설정 - 내 코드에서'네임 스페이스 사용 안함 ' –