C++中类定义

题目是:定义一个日期类date,数据成员有year,month,day.成员函数有:
(1)私有成员函数 int isleap()判断year是否为闰年,若是返回1,否则返回0.
(2)私有成员函数 int check()判断日期是否合法,若合法返回1,若不合法返回0.
(3)设置年,月,日,一并检测是否为合法日期。
(4)按yyyy/mm/dd格式输出日期。若是闰年,还要输出是闰年的信息。
在主函数中定义一个日期类对象,任意输出年,月,日值。然后对任意成员进行测试。
我编的程序它执行不对结果,大家帮我看一下错误在哪好不好

#include<iostream>
using namespace std;
class date
{
private:
int year,month,day;
int isleap(int);
int check(int,int,int);
public:
void newisleap(int)
{isleap;}
void newcheck(int,int,int)
{check;}
void showdate(int yy,int mm,int dd);
};
int date::isleap(int yy)
{(yy%4==0)?1:0;
return 0;}
int date::check(int yy,int mm,int dd)
{(yy>=1000&&yy<=9999)?1:0;(mm>=1&&mm<=12)?1:0;(dd>=1&&dd<=31)?1:0;
return 0;}
void date::showdate(int yy,int mm,int dd)
{cout<<yy<<"/"<<mm<<"/"<<dd;}
int main()
{
int year,month,day;
date date1;
cout<<"Please input the year:"<<endl;
cin>>year;
date1.newisleap(year);
cout<<"Please input the year,month and day:"<<endl;
cin>>year>>month>>day;
cout<<"If the year is not leap:"<<endl;
date1.newcheck(year,month,day);
date1.showdate(year,month,day);
return 0;
}

#include <iostream>
using namespace std;

typedef unsigned int uint;

class date
{
private: 
unsigned int year;
unsigned int month;
unsigned int day;

int isleap(uint yy);
int check(uint yy, uint mm, uint dd);
public:
date() : year(1000), month(1), day(1)
{
}

int setdate(uint yy, uint mm, uint dd);
void showdate();
};

int date::isleap(uint yy)
{
if (((yy%4) == 0 && (yy%100))  // 能被4整除不能被100整除
|| (yy%400) == 0)   // 能被400整除
return 1;
return 0;
}

int date::setdate(uint yy, uint mm, uint dd)
{
// 判断是否合法
if (!check(yy, mm, dd))
{
cout << "yy = " << yy 
 << ", mm = " << mm
 << ", dd = " << dd 
 << "  is not correct!" << endl;
return 0;
}
year = yy;
month = mm;
day = dd;
return 1;
}

int date::check(uint yy, uint mm, uint dd)
{
// 每个月份对应的天数
uint month_day[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
if (isleap(yy))
month_day[1] = 29; // 闰年二月29天

// 判断年月日是否合法
if (yy < 1000 || yy > 9999)
return 0;
if (mm < 1 || mm > 12)
return 0;
if (dd < 1 || dd > month_day[mm - 1])
return 0;
return 1;
}

void date::showdate()
{
if (isleap(year))
cout << "闰年 : ";
cout << year << "/" << month << "/" << day << endl;
}

int main()
{
int year, month, day;
date d;
while (1)
{
cout << "Please input the year,month and day:" << endl;
cin >> year >> month >> day;
if (d.setdate(year, month, day))
d.showdate();
cout << endl;
}
return 0;
}

帮你改了一个,是根据你的题目需求而作。

你原来的思想大概是误解了题目意思(当然,也有可能是我理解错误),可以参考我的代码好好理解一下。


写代码,如果要从事这方面,要有一个整洁的作风。

另外,不建议使用复杂语句,比如你的那个条件判断 ? :

好的代码,是效率不差,但阅读起来最简单的。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-09-23
先不说你main函数的最后很有问题,光是前面就有很多小错误:
(1)newisleap函数的内容是调用isleap函数,应该写成isleap(参数)的形式,newcheck函数也一样;

(2)你对三元条件判断语句不会用。(yy%4==0)?1:0这个是个赋值选择语句,要么改成添加一个 整形变量来记录0或1,要么改成return (yy%4==0 || yy %400 ==0)?1:0;注意判断闰年你少了yy%400;其他类似的你自己可以试着改改呀!!
(3)还有你在用newisleap和newcheck检测之后要干什么没有写出来,格式错了程序有什么反应?是要求用户重新输入数据还是你的程序自己帮他改正?这些你没有写,这也就不奇怪你的程序会没有按照你想要的结果来显示了

(4)你定义的私有成员变量year,month,day没有用上啊,我估计你是想用他们来记录正确格式的年月日的吧!
最后就是你的main函数的最后,你的意思是如果该年不是闰年,调用函数检查,函数返回0或1,你要0或1来干什么没有写啊,最后打印年月日,估计和你输入的是一样的。

所以给你的建议是:
你可以在check函数和isleap函数里面添加代码,你让函数返回0或1其实用不着,可以改成void返回类型,在里面添加针对日期错误格式的各种情况如何处理的代码,利用好你定义的私有成员变量。
第2个回答  2014-09-23
整个程序错的一蹋糊涂!
闰年计算方法错误
函数调用错误
输出日期应该是类对象输出才叫使用类
乱用:?
return的理解也不对!本回答被网友采纳
第3个回答  2014-09-23
好糟糕的代码

相似回答