使用带有类的重载函数,无法弄清楚垃圾来自哪里

Posted

技术标签:

【中文标题】使用带有类的重载函数,无法弄清楚垃圾来自哪里【英文标题】: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) 上却不能完美运行。”,因为您的代码包含这些函数中的任何一个。 构造函数真的不应该做这种事情。 【参考方案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();


【讨论】:

上面有人提到了另一种方式。这就是这样做的。我应该知道这一点。谢谢!

以上是关于使用带有类的重载函数,无法弄清楚垃圾来自哪里的主要内容,如果未能解决你的问题,请参考以下文章

Java实现类的重载及使用垃圾回收钩子函数

智能指针

STL详解—— list的模拟实现

C++ 类的多态二(函数重载--函数重写--函数重定义)

使用模板重载类的成员函数

实验2:函数重载函数模板简单类的定义和实现