2014-01-05 2 views
0

Я пытаюсь написать конструктор в C++ (я новичок).Значение параметра C++ Constructor

Моя попытка:

class Tree 
{ 
    private: 
     int leaf; 

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

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

Является ли это правильный способ, как это сделать? Поскольку я нашел много разных версий с srcpy, без и т. Д.

+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) или Google 'strcpy', чтобы узнать, что он делает. –

ответ

7

Нет, это не так. strcpy предназначен для копирования строк с нулевым символом. Используйте список инициализации конструктора:

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

отметить также, что ваш конструктор позволяет неявное преобразование из int в Tree. Таким образом, вы можете сделать такую ​​вещь:

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 - обычно используется префикс m_ перед всеми переменными-членами (More on Hungarian Notation here).