2014-01-05 55 views
0

我想在C++中編寫構造函數(我是新建的)。C++構造函數設置值

我嘗試:

class Tree 
{ 
    private: 
     int leaf; 

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

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

這是正確的方式該怎麼辦呢?由於我發現許多與srcpy不同的版本,沒有,等等。

+0

[Initializing fields in constructor - initializer list vs constructor body]可能的重複(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)或Google'strcpy'來找出它的功能。 –

回答

7

不,它不是。 strcpy用於複製以空字符結尾的字符串。使用構造函數初始化列表:

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

另外請注意,你的構造允許從intTree隱式轉換。所以,你可以做這樣的事情:

Tree t = 4 + 5; 

如果不希望這種行爲,標誌着構造明確:

explicit Tree(int leaf); 
1

你可以簡單地初始化INT這樣的:

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

strcpy不需要,它是用於C字符串。它不會編譯,因爲它需要一個char*指針。

+0

所以如果你使用一個字符串(char *),你必須使用strcpy呢? – user3126119

+0

@ user3126119,我建議使用'std :: string'並做與此完全相同的事情。 @cage,它初始化它,不分配。 – chris

+0

幫你一個忙,不要使用C字符串(char *)。使用C++字符串('std :: string'),它可以像'int'那樣初始化。 – leemes

0

您可以使用std::copy,如果你真的使用某種記憶複印功能,但m_leaf = leaf作品一樣好和易於閱讀。注意我使用m_leaf而不是leaf - 在所有成員變量(更多關於匈牙利語表示法here)之前添加前綴m_是很常見的。