2014-01-05 3 views
0

C++로 생성자를 작성하려고합니다 (새로운 기능).C++ 생성자 설정 값

내 시도 :

class Tree 
{ 
    private: 
     int leaf; 

    public: 
     Tree(int leaf); //constructor 
}; 

Tree::Tree(int leaf) //constructor 
{ 
strcpy(this->leaf, leaf); 
} 

이 그것을 수행하는 방법 적절한 방법이 있나요? srcpy, without, 등등으로 많은 다른 버전을 발견 했으므로

+0

가능한 복제본 [생성자 - 이니셜 라이저 목록과 생성자 본문의 필드 초기화] (http://stackoverflow.com/questions/9903248/initializing-fields-in-constructor-initializer-list-vs-constructor-body) – ManuelH

+6

당신은 친절하게 우리에게 호의를 베풀 겠고 사람들이 C++을 어떻게 배우는 지 이해할 수있게 도와 주시겠습니까? 왜 'strcpy'가 적절하다고 여기는 이유를 설명해주십시오. 나는 생각의 과정에 대해 진정으로 궁금합니다. –

+1

당신이 [이전 질문에 대한 내 대답] (http://stackoverflow.com/a/20939216/560648)을 읽지 않았다는 것을 유감스럽게 생각합니다. –

답변

7

아니요, 아닙니다. strcpy은 Null로 끝나는 문자열을 복사하기위한 것입니다.

Tree::Tree(int leaf) : leaf(leaf) {} 

은 또한 당신의 생성자는 int에서 Tree에 암시 적 변환을 허용 참고 : 생성자 초기화 목록을 사용합니다.

explicit Tree(int leaf); 
1

당신은 단순히이 같은 INT를 초기화 할 수 있습니다 :

Tree::Tree(int leaf) //constructor 
    : leaf(leaf) 
{ 
} 
이 동작을하지 않을 경우

Tree t = 4 + 5; 

가 명시 적 생성자를 표시 : 그래서 당신은 이런 종류의 일을 수행 할 수 있습니다

strcpy은 필요하지 않으며 C 문자열 용입니다. char* 포인터를 예상하므로 컴파일되지 않습니다.

+0

그래서 문자열 (char *)을 사용한다면 strcpy를 사용해야합니까? – user3126119

+0

@ user3126119,'std :: string'을 사용하고 똑같은 일을하는 것이 좋습니다. @cage, 할당하지 않고 초기화합니다. – chris

+0

C- 문자열 (char *)을 사용하지 마십시오. 'int'처럼 초기화 될 수있는 C++ 문자열 ('std :: string')을 사용하십시오. – leemes

0

당신은 당신이 정말은 메모리 복사 기능의 일종을 사용하려는 경우 std::copy를 사용하지만, m_leaf = leaf 마찬가지로 잘 작동하고 읽기 쉽게 할 수 있습니다. 대신 m_leaf을 사용합니다. 모든 멤버 변수 앞에 접두어 m_을 추가하는 것이 일반적입니다 (헝가리 표기법에 대한 추가 정보 here).