【问题标题】:Using overloaded functions with classes, can't figure out where the garbage is coming from使用带有类的重载函数,无法弄清楚垃圾来自哪里
【发布时间】:2014-12-10 19:29:28
【问题描述】:

我正在开发这个程序,在该程序中,用户可以输入日期数字或月份和日期来获取另一个。

我遇到的问题是,当创建一个类的实例并将其传递给构造函数时,它正确显示了日期 #,但是当它调用 print 时,我得到了垃圾。如果我将 day 初始化为 0,它会说 day 是 182,但是当调用 print 时,它会打印 0。

它在 DayOfYear() 上完美运行,但不是 DayOfYear(int day)。

我被难住了。

#include <iostream>
#include <iomanip>

using namespace std;





//class declaration
class DayOfYear
{
private:

    static const int MonthDays[];
    static const string MonthName[];
public:
    //static const int MonthDays[];
    //static const string MonthName[];
    int day;

    DayOfYear();
    DayOfYear(int day);
    DayOfYear(string month_, int day_);
    void print();   
};

DayOfYear::DayOfYear()
{
    cout << "\nEnter a number you would like to convert into a month and day: ";
    cin >> day;

    //Error check for negative numbers and numbers higher than one year
    while(day <= 0 || day > 365)
    {
        cout << "You must enter a valid number (1 thru 365)" << endl;
        cin>>day;
    }

    //call print() function
    print();
}





DayOfYear::DayOfYear(int day)
{
    cout<<"\nDay of the year"<<day<<"is";
    print();

}    

DayOfYear::DayOfYear(string month_,int day_)
{
    int count=0;

    while (month_ != DayOfYear::MonthName[count])
    {count++;}

    int result = DayOfYear::MonthDays[count] + day_;

    cout<<"Day number= "<<result<<endl;
}


//days of each month into an array
const int DayOfYear::MonthDays[] = {31, 28, 31,30,31,30,31,31,30,31,30,31};
//name of each month into an array
const string DayOfYear::MonthName[] = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"};






void DayOfYear::print()
{
    int month = 0;
    //int day_=0;
    //day_=day;
    cout<<"\nprint start day: "<<day<<endl;
    while ((DayOfYear::MonthDays[month] < day)&& (month<11)){
        day=day-DayOfYear::MonthDays[month];
        month++;
    cout<<"/nprint month: "<<month<<" day: "<<day<<endl;
    }
    cout << DayOfYear::MonthName[month] << " " << day;
};


int main()
{   
    int day=0;

    DayOfYear();
    DayOfYear halfway(365/2);
    //halfway.print();


    return 0;

}

【问题讨论】:

  • DayOfWeek?我所看到的只是代码中的 DayOfYear...确保您发布正确的代码,以及您的输入和输出是什么
  • 它不可能“在 DayOfWeek() 上完美运行,但在 DayOfWeek(int day) 上却不能完美运行。”,因为您的代码包含这些函数中的任何一个。
  • 构造函数真的不应该做这种事情。

标签: c++ class overloading


【解决方案1】:

您需要在 DayOfYear::DayOfYear(int) 构造函数中初始化 day 成员。更改此行:

DayOfYear::DayOfYear(int day)

到这里:

DayOfYear::DayOfYear(int day_) : day(day_)

【讨论】:

    【解决方案2】:

    在你的 DayOfYear(int day) 构造函数中你永远不会分配你的私有变量,我会做这样的事情

    DayOfYear::DayOfYear(int inDay)
    {
        day = inDay;
        cout<<"\nDay of the year"<<day<<"is";
        print();
    
    }
    

    【讨论】:

    • 上面有人提到了另一种方式。这就是这样做的。我应该知道这一点。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2020-01-02
    • 2021-06-27
    • 2019-09-10
    • 1970-01-01
    • 2017-09-11
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多