我正在尝试用C ++编写构造函数(我是新的)。
我的尝试:
class Tree
{
private:
int leaf;
public:
Tree(int leaf); //constructor
};
Tree::Tree(int leaf) //constructor
{
strcpy(this->leaf, leaf);
}
这是怎么做的正确方法?因为我发现许多不同版本的srcpy,没有等等。
答案 0 :(得分:7)
不,不是。 strcpy
用于复制以null结尾的字符串。使用构造函数初始化列表:
Tree::Tree(int leaf) : leaf(leaf) {}
另请注意,您的构造函数允许从int
到Tree
的隐式转换。所以你可以做这件事:
Tree t = 4 + 5;
如果您不想要此行为,请将构造函数标记为显式:
explicit Tree(int leaf);
答案 1 :(得分:1)
您可以像这样简单地初始化int:
Tree::Tree(int leaf) //constructor
: leaf(leaf)
{
}
不需要 strcpy
,它适用于C字符串。它没有编译,因为它需要一个char*
指针。
答案 2 :(得分:0)
如果确实希望使用某种内存复制功能,则可以使用std::copy
,但m_leaf = leaf
同样有效并且更易于阅读。请注意我使用m_leaf
而不是leaf
- 在所有成员变量之前添加前缀m_
是常见的(更多关于匈牙利表示法here)。