使用带有类的重载函数,无法弄清楚垃圾来自哪里
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();
【讨论】:
上面有人提到了另一种方式。这就是这样做的。我应该知道这一点。谢谢!以上是关于使用带有类的重载函数,无法弄清楚垃圾来自哪里的主要内容,如果未能解决你的问题,请参考以下文章