【问题标题】:C++ Constructor setting valueC++ 构造函数设置值
【发布时间】:2014-01-05 21:32:21
【问题描述】:

我正在尝试用 C++ 编写一个构造函数(我是新手)。

我的尝试:

class Tree
{
    private:
        int leaf;

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

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

这是正确的方法吗?因为我发现了很多不同的版本,有 srcpy,没有 等。

【问题讨论】:

标签: c++ constructor


【解决方案1】:

不,不是。 strcpy 用于复制以空字符结尾的字符串。使用构造函数初始化列表:

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

还请注意,您的构造函数允许从 intTree 的隐式转换。所以你可以做这样的事情:

Tree t = 4 + 5;

如果您不想要这种行为,请将构造函数标记为显式:

explicit Tree(int leaf);

【讨论】:

    【解决方案2】:

    您可以像这样简单地初始化 int:

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

    strcpy 不是必需的,它适用于 C 字符串。它无法编译,因为它需要一个 char* 指针。

    【讨论】:

    • 所以如果你使用一个字符串 (char* ) 你必须使用 strcpy 吗?
    • @user3126119,我建议使用std::string 并执行与此完全相同的操作。 @cage,它初始化它,而不是分配。
    • 帮自己一个忙,不要使用 C 字符串 (char*)。使用可以像 int 一样初始化的 C++ 字符串 (std::string)。
    • @cageman 这是初始化,而不是赋值。另外,strcpywon't compile 在这里,已在您的答案中解决了这个问题。
    • 你能用 std::string 编辑我的代码吗,因为我不知道该怎么做,我一直在尝试,但仍然没有成功。我会很感激
    【解决方案3】:

    如果您真的想要使用某种内存复制功能,您可以使用std::copy,但m_leaf = leaf 也同样有效并且更易于阅读。注意我使用m_leaf 而不是leaf - 通常在所有成员变量之前添加前缀m_(更多关于匈牙利符号here)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-12
      • 1970-01-01
      • 2014-07-24
      • 1970-01-01
      • 1970-01-01
      • 2021-07-20
      • 2015-02-06
      • 2023-03-21
      相关资源
      最近更新 更多