【问题标题】:Constructor setting all values to 0构造函数将所有值设置为 0
【发布时间】:2019-03-13 20:15:28
【问题描述】:

因此,根据我在学校的作业,我必须创建一个默认构造函数,该构造函数应该将所有浮点数和整数设置为 0,并将所有字符串设置为“NA”。

之前很简单,我只需要做一个构造函数来将音量设置为 0,将卡路里设置为 0 等等。

我的问题是,

将所有浮点数和整数设置为 0 并尝试将字符串全部设为“NA”的语法如何?

这就是我目前所拥有的

class Candy {
private:
    float sweetness;

protected:
    string color;

//CONSTRUCTOR//

    void setName(string n);

    void setFloat(float f);

    void setInt(int i);

这是我们必须做的另一个 cpp 文件。

Candy::Candy() {

Candy(string n) {
    setName(n);
}

Candy bo("NA");
}

我的方向正确吗?我对此真的很陌生,而且我的语法不是很好。谢谢!

【问题讨论】:

标签: c++ oop constructor private


【解决方案1】:

好的,让我们看看你的头文件:

class Candy {
public:
    Candy();
private:
    float sweetness;

protected:
    string color;

    void setName(string n);

    void setFloat(float f);

    void setInt(int i);
};

你需要在 public 部分声明构造函数,这样你就可以从外部调用它。它没有返回类型,也没有参数(它应该自行将所有内容设置为 0,而不是您提供的值)。

在 cpp 文件中实现构造函数和之前声明的其他方法:

#include "Candy.h" // Or whatever the filename is

Candy::Candy() {
    sweetness = 0.0f;
    color = "NA";
}

// Implement the other methods, I don't know what they should do
// Example:
void Candy::setName(string n) {
    // Do what you want
}

注意你必须实现每一个方法,否则你会得到错误。

【讨论】:

  • 所以如果我必须将所有浮点数或整数设置为 0,我只会说“floats = 0;”?
  • 你真的应该更喜欢使用构造函数初始化列表而不是构造函数体。使用 body 意味着首先默认初始化成员,然后分配给它。这是低效的(对于某些类型甚至是不可能的)。
  • @PKPython 没有像floats = 0; 这样的“将所有浮点数设置为零”这样的东西。您需要将它们单独设置为零(或任何其他值)。最受好评的答案就是您所需要的。
【解决方案2】:

使用构造函数初始化列表:

class Candy {
private:
    float sweetness;

protected:
    string color;

public:
    Candy() : sweetness(0.0f), color("NA") { }
};

或者(在 C++11 或更高版本中),使用类内初始化器:

class Candy {
private:
    float sweetness = 0.0f;

protected:
    string color = "NA";

public:
    Candy() = default;
};

【讨论】:

  • 第二种方法不适用于 C++ 11 之前的 C++ 标准。OP 应该意识到这一点。
  • @duong_dajgja 这个问题同时被标记为 c++11 和 c++14,所以可以放心地假设我们不在 C++11 之前的领域;-)
  • @JesperJuhl 不,该问题未标记任何特定版本,因此提及此版本适用于您的答案。
  • @Mr Lister 我刚刚仔细检查了一遍。它标记为特定版本。但是没关系。提及它并没有坏处。我已经更新了答案。
猜你喜欢
  • 1970-01-01
  • 2020-02-06
  • 2015-12-27
  • 2014-09-03
  • 2014-07-24
  • 2012-03-09
  • 2012-01-11
  • 1970-01-01
  • 2018-03-11
相关资源
最近更新 更多