#include<iostream>
using namespace std;
class customdate
{
public:
int da,yr;
customdate(int d=0,int y=0){da=d;yr=y;}
void display(){cout<<endl<<yr<<'/'<<da;}
};
class date
{int mo,da,yr;
public:
date(int m=0,int d=0,int y=0)//构造函数
{mo=m;da=d;yr=y;}
date(const customdate&);//转换构造函数
operator customdate();
void display()
{cout<<endl<<mo<<'/'<<da<<'/'<<yr;}
};
static int sys[]={31,28,31,30,31,30,31,31,30,31,30,31};
date::date(const customdate& jr)//转换构造函数由customdate->date
{
yr=jr.yr;
da=jr.da;
for(int mo=0;mo<11;mo++)
if(da>sys[mo])
da-=sys[mo];
else
break;
mo++;
}
date::operator customdate()//成员转换函数由date->customdate
{
customdate cd(0,yr);
for(int i=0;i<mo-1;i++)
cd.da+=sys[i];
cd.da+=da;
return cd;
}
int main()
{
date dt(11,17,97);
customdate cd;
cd=dt;
cd.display();
dt=cd;
dt.display();
system("pause");
return 0;
}
以上是源程序,实现功能是完成97/321和11/17/97两种日期之间的转换,本人以为自己的编码没有漏洞,但是执行结果却出人意料
执行结果是
97/321
-***********/17/97
请哪位高手指点一二
參考答案:问题在这个函数里:
date::date(const customdate& jr)//转换构造函数由customdate->date
{
yr=jr.yr;
da=jr.da;
for(int mo=0;mo<11;mo++) // 问题所在:这里应去掉int
if(da>sys[mo])
da-=sys[mo];
else
break;
mo++;
}
我想你的本意用date的成员属性mo做循环,顺便就可以赋值了。可能写for循环的时候习惯性的加了int声明,结果就变了。