C ++中的构造函数和布尔函数中的安全空状态:

时间:2019-02-03 20:51:55

标签: c++

在我的代码中,我正在执行以下操作,但是我不确定是否允许这样做,或者这是否是C ++中的一种好习惯。我需要创建一个安全的空构造函数,但是我还需要一个构造函数,该构造函数可以在给定参数的情况下初始化变量。因此,我正在执行以下操作:

这是Traveler.h文件:

namespace sict
{
// TODO: define the constants here

const int max_destination_size = 32;
const int max_name_size = 16;

// TODO: define the Traveler class here

class Traveler
{
private:
    char fName[max_name_size];
    char lName[max_name_size];
    char dest[max_destination_size];
public:
    // Empty Constructor.
    Traveler();
    // Constructor that accepts 3 parameters.
    Traveler(char* fn, char* ln, char* dt);
    bool isEmpty() const;
    void display() const;
};

这是Traveler.cpp文件:

namespace sict
{
// TODO: implement the default constructor here
Traveler::Traveler()
{

}
// TODO: implement the constructor with 3 parameters here
Traveler::Traveler(char* fn, char* ln, char* dt)
{
    if (&fn != nullptr || &ln != nullptr || dt != nullptr)
    {

    }

}
// TODO: implement isEmpty query here
bool Traveler::isEmpty() const
{

}
// TODO: implement display query here
void Traveler::display() const
{

}

}

有关Empty构造函数的说明如下:

默认构造函数(无参数构造函数):该构造函数将Traveler对象设置为安全的空状态。

我熟悉将变量设置为空状态,但是对于如何将构造函数设置为空状态有些困惑。

布尔和显示功能的说明如下:

bool isEmpty()const:一个查询,报告Traveler对象是否处于安全的空状态。

void display()const:以以下格式显示Traveler对象的内容的查询(另请参见下面的输出列表)。

我不熟悉这段代码中的查询概念。尽管我知道查询用于报告对象的状态,但我不知道如何使用和声明查询。

1 个答案:

答案 0 :(得分:0)

正如Pete Becker指出的那样,您可以决定安全空状态对您自己的数据类型的含义。

使用默认构造函数实例化对象时,您的c样式字符串(fName,lName和dest)将仅在其中包含随机/垃圾值。

因此,进一步使用您的对象很可能会导致不需要的结果

您可以在默认构造函数中将c样式的字符串初始化为空字符串,然后使 isEmpty()函数检查其中的一个(或全部)字符串实际上是空的。 请注意,如果使用 std :: string 类(我建议您从现在开始使用),可以避免这种情况。

最终,您可以从类中删除默认构造函数,这样,在实例化对象时,您必须用值填充字符串。