【问题标题】:How to create object arrays with classes that have constructors in C++如何在 C++ 中使用具有构造函数的类创建对象数组
【发布时间】:2021-01-23 04:18:41
【问题描述】:
class Time {
private:
    int hour = 0;
    int minute = 0;
public:
    Time(int hour, int minute);
    void setHour(int hour);
    void setMinute(int minute);
    int getHour();
    int getMinute();
    void print();
    void advance();
};
Time::Time(int h, int m) // DONE
{
    hour = h;
    minute = m;
    if (hour > 23) 
    {
        hour = 0;
    }
    if (minute > 59) 
    {
        minute = 0;
    }
}
void Time::setHour(int h) // DONE
{
    if (h > 23) 
    {
        hour = 0;
    }
    else 
    {
        hour = h;
    }
}
void Time::setMinute(int m) // DONE
{
    if (m > 59) 
    {
        minute = 0;
    }
    else 
    {
        minute = m;
    }
}
int Time::getHour() // DONE
{
    return hour;
}
int Time::getMinute() // DONE
{
    return minute;
}
void Time::print() // DONE
{
    string period;
    string minutezero;
    
    if (hour > 12) 
    {
        hour = hour - 12;
        period = "PM";
    }
    else if (hour < 13) 
    {
        period = "AM";
    }
    if (hour == 0) 
    {
        hour = 12;
        period = "AM";
    }
    if (minute < 10)
    {
        cout << hour << ":" << "0" << minute << " " << period;
    }
    else if (minute > 9)
    {
        cout << hour << ":" << minute << " " << period;
    }

}
void Time::advance() // DONE
{
    minute = minute + 1;
    if (minute == 60) 
    {
        minute = 0;
        hour = hour + 1;
    }
    if (hour == 24) 
    {
        hour = 0;
    }
}

在我的 int main 函数中,我想创建一个数组 时间 t[5] 将容纳 5 个时间对象。我将如何编码?

这是我的模块一字不差的说:

**修改 Time 类以设置构造函数,如下所示 可以在驱动程序中创建时间对象。设置如下指定的时间数组和 也可以打印驱动程序中的时间(可以添加到普通版本并提交一个版本)。

时间t1; // 小时: 0, 分钟: 0, 12:00 AM

时间 t2(8); // 小时: 8, 分钟: 0, 8:00 AM

时间 t3(13, 30); // 小时:13,分钟:30,下午 1:30

时间 t4(25, 5); // 小时: 0, 分钟: 5, 12:05 AM

时间 t4(12, 60); // 小时: 12, 分钟: 0, 12:00 PMI**

【问题讨论】:

  • 您的Time 类需要一个默认构造函数。目前它只有一个带有两个参数的构造函数。我建议你创建另一个不带参数的构造函数,只是将其成员初始化为零。
  • 其实看了后续的需求,看来你也只需要一个小时来支持构建。在这种情况下,您可以避免为现有构造函数声明默认参数值。
  • 等待.. 原始要求是否表明当天有 25 小时?大声笑(一天 24 小时:24 == 0)

标签: c++ arrays class constructor


【解决方案1】:

例如

#include <algorithm>
#include <vector>
#include <iterator>
 
int main(){
    std::vector<Time> t;
    std::fill_n(std::back_inserter(t), 5, Time(0, 0));
}

或者使用指针

std::array<std::unique_ptr<Time>, 5> t;  // std::unique_ptr<Time> t[5];

根据Time t1; // hour: 0, minute: 0, 12:00 AM 的要求,您必须添加并实现默认构造函数Time::Time(),或者如果您只使用默认参数值创建一个Time::Time(int hour = 0, int minute = 0),则更好。

一点更新:

class Time {
private:
    int hour = 0;
    int minute = 0;
public:
    Time(int hour = 0, int minute = 0);
    // skipped

【讨论】:

    【解决方案2】:

    正如 paddy 在评论中指出的那样,您需要一个看起来像这样的默认构造函数:

    Time::Time() : hour(0), minute(0) { }
    

    你还需要一个只有小时作为参数的构造函数

    Time::Time(int h) : hour(h), minute(0) {
        if (hour > 23) hour = 0;
    }
    

    之后你的课程看起来像这样

    public:
        Time();
        Time(int h);
        Time(int hour, int minute);
        void setHour(int hour);
        ...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-08-10
      • 2013-07-09
      • 2020-04-02
      • 1970-01-01
      • 2018-01-22
      • 1970-01-01
      • 1970-01-01
      • 2019-04-18
      相关资源
      最近更新 更多