关于C++中类的问题,希望大家来讨论!!!!!

woaichenyu 2004-11-20 11:07:12
小弟用C++定义了一个类,printf()成员函数实现打印日期,dateinc()成员函数实现日期加一天,data()设置日期

可在编译时,类没有错误,在调用时有一点错误,搞不明白呀!!!


还请高手帮忙~!!!!!!!!

源代码如下:
# include <iostream.h>

class Tdate
{
public:
void print(); //打印日期
void dateinc(); //日期加一天
void data(int,int,int); //设置日期
private:
int month;
int day;
int year;
};

void Tdate::print() //成员函数的实现
{

cout<<"day/month/year"<<ends;
cout<<day<<"_"<<month<<"_"<<year<<endl;
}
void Tdate::data(int d,int m,int y) //设置日期成员函数
{
day=d;
month=m;
year=y;

cout<<"news date is :"<<endl;
cout<<day<<"_"<<month<<"_"<<year<<endl;
}

void Tdate::dateinc() //日期加一天成员函数
{ int a=0;
if (month==NULL||day==NULL||year==NULL)
cout<<"date is NULL";
else //处理日
{
if (!(year%4)&&(year%400)) //判断是润年
{
a=1;
}
if (day==30) //30号则小月份加一
{
switch(month)
{
case 2: day=1;month+=1;break;
case 4: day=1;month+=1;break;
case 6: day=1;month+=1;break;
case 9: day=1;month+=1;break;
case 11: day=1;month+=1;break;
default:day+=1;
}
}
else if (day==31) //31号则所有月份加一
{
day=1;
month+=1;
}
else if ((day==28 ||day==29)&&(a==1))
{
day=1;
month+=1;
}
else
{
day+=1;
}

if (month==12)
{
month=1;
year+=1;
}
else
{
month+=1;
}

}

void main()
{
Tdate a;
a.data(20,11,2004);
a.print();
a.dateinc();
a.print();
}
...全文
246 27 打赏 收藏 转发到动态 举报
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
yleric 2004-11-22
  • 打赏
  • 举报
回复
else
{
month+=1;
}
把这段去掉,2月份好使啊!
shhao 2004-11-22
  • 打赏
  • 举报
回复
现成的日期函数不用,精力过剩啊?
bingpuyaren 2004-11-21
  • 打赏
  • 举报
回复
不需要写构造函数,只是少了一个"}".

我试过了,可以跑~


#include "stdafx.h"

# include <iostream.h>

class Tdate
{
public:
void print(); //打印日期
void dateinc(); //日期加一天
void data(int,int,int); //设置日期
private:
int month;
int day;
int year;
};



void Tdate::print() //成员函数的实现
{

cout<<"day/month/year"<<ends;
cout<<day<<"_"<<month<<"_"<<year<<endl;
}
void Tdate::data(int d,int m,int y) //设置日期成员函数
{
day=d;
month=m;
year=y;

cout<<"news date is :"<<endl;
cout<<day<<"_"<<month<<"_"<<year<<endl;
}

void Tdate::dateinc() //日期加一天成员函数
{ int a=0;
if (month==NULL||day==NULL||year==NULL)
cout<<"date is NULL";
else //处理日
{
if (!(year%4)&&(year%400)) //判断是润年
{
a=1;
}
if (day==30) //30号则小月份加一
{
switch(month)
{
case 2: day=1;month+=1;break;
case 4: day=1;month+=1;break;
case 6: day=1;month+=1;break;
case 9: day=1;month+=1;break;
case 11: day=1;month+=1;break;
default:day+=1;
}
}
else if (day==31) //31号则所有月份加一
{
day=1;
month+=1;
}
else if ((day==28 ||day==29)&&(a==1))
{
day=1;
month+=1;
}
else
{
day+=1;
}

if (month==12)
{
month=1;
year+=1;
}
else
{
month+=1;
}
}

}

void main()
{
Tdate a;
a.data(20,11,2004);
a.print();
a.dateinc();
a.print();
}
fcf128 2004-11-21
  • 打赏
  • 举报
回复
加上标准的 TDate() 与 virtual ~TDate() .
fcf128 2004-11-21
  • 打赏
  • 举报
回复
.............
woaichenyu 2004-11-21
  • 打赏
  • 举报
回复
看到这么多老大的热情帮忙,

小弟实在是感激不尽呀


可是我按照上面各位的方法改了过后,还是跑不了呀
just_to_learn 2004-11-21
  • 打赏
  • 举报
回复
...........
if (month==12)
{
month=1;
year+=1;
}
else
{
month+=1;
}
................


这一段应该改一下!!不然怎么都会加一个月上去的
just_to_learn 2004-11-21
  • 打赏
  • 举报
回复
不改值也不对啊!!!
我运行了下 20,11,2004 怎么会成了 21,12,2004 !!! 多加了个月啊
lichaoxu 2004-11-21
  • 打赏
  • 举报
回复
应该改成
void Tdate::data(int d,int m,int y) //设置日期成员函数
{
day=d;
month=m;
year=y;

cout<<"news date is :"<<endl;
cout<<day<<"_"<<month<<"_"<<year<<endl;
}

void Tdate::dateinc() //日期加一天成员函数
{ int a=0;
if (month==NULL||day==NULL||year==NULL)
cout<<"date is NULL";
else //处理日
{
if (!(year%4)&&(year%400)) //判断是润年
{
a=1;
}

if (day==30) //30号则小月份加一
{
switch(month)
{
case 2: day=1;month+=1;break;
case 4: day=1;month+=1;break;
case 6: day=1;month+=1;break;
case 9: day=1;month+=1;break;
case 11: day=1;month+=1;break;
default:day+=1;
}
}

else if (day==31) //31号则所有月份加一
{
day=1;
month+=1;
}

else if ((day==28 ||day==29)&&(a==1))
{
day=1;
month+=1;
}

else
{
day+=1;
}

if (month==12)
{
month=1;
year+=1;
}
}
}
不要最后的
else
{
month+=1;
}
就好了
lichaoxu 2004-11-21
  • 打赏
  • 举报
回复
a.data(31,7,1979);
结果是:1,9,1979
lichaoxu 2004-11-21
  • 打赏
  • 举报
回复
#include"car.h"
void main()
{
Tdate a;
a.data(29,7,1979);
a.print();
a.dateinc();
a.print();
}
a.data(29,7,1979);//改一个值结果好象不对哦
www_big 2004-11-21
  • 打赏
  • 举报
回复
着好象是书上的习题吧, 都是语法知识,慢慢来...... : )
www_big 2004-11-21
  • 打赏
  • 举报
回复
当然会错,你现在是面向对象,输出和输入都应该用成员函数实现ok?
你的code错误应该是day, month, year 未定义
写以下成员函数应该可以ok..la
int get_day()
{
return day;
}
//...................
int get_month()
{
return month;

}
//..................
int get_year()
{
return year;
}
在输出中访问成员函数:
:cout << get_day() << "_" << get_month() << "_" << get_year() << endl;
woaichenyu 2004-11-21
  • 打赏
  • 举报
回复
我把它改还这样,是可以跑了,也可以计算平常的月份了,但不能计算2月份,请那位老大再帮帮忙呀

# include <iostream.h>

class Tdate
{
public:
void print(); //打印日期
void dateinc(); //日期加一天
void data(int,int,int); //设置日期
private:
int month;
int day;
int year;
};

void Tdate::print() //成员函数的实现
{

cout<<"printf day/month/year"<<endl;
cout<<day<<"_"<<month<<"_"<<year<<endl;
}

void Tdate::data(int d,int m,int y) //设置日期成员函数
{
day=d;
month=m;
year=y;

cout<<"news date is :"<<endl;
cout<<day<<"_"<<month<<"_"<<year<<endl;
}

void Tdate::dateinc() //日期加一天成员函数
{ int a=0;
cout<<"Date add one day:"<<endl;
if (month==NULL||day==NULL||year==NULL)
cout<<"date is NULL";
else //处理日
{
if (!(year%4)&&(year%400)) //判断是润年
{
a=1;
}

if (day==30) //30号则小月份加一
{
switch(month)
{
case 2: day=1;month+=1;break;
case 4: day=1;month+=1;break;
case 6: day=1;month+=1;break;
case 9: day=1;month+=1;break;
case 11: day=1;month+=1;break;
default:day+=1;
}
}

else if (day==31) //31号则所有月份加一
{
day=1;
month+=1;
}

else if ((day==28 ||day==29)&&(a==1))
{
day=1;
month+=1;
}

else
{
day+=1;
}


if (month==12)
{
month=1;
year+=1;
}

}
}
void main()
{
Tdate a;
int b,c,d;
cout<<"input date day/month/year"<<endl;
cin>>b>>c>>d;
if (c>12)
{
cout<<"Error month not >12"<<endl;
}
if (b>31)
{
cout<<"Error day not >31"<<endl;
}
else
{
a.data(b,c,d);
a.print();
a.dateinc();
a.print();
}
}
woaichenyu 2004-11-21
  • 打赏
  • 举报
回复
请问用这个表达式来判断润年正确否
如果不正确改用那个表达式呢

if (!(year%4)&&(year%400)) //判断是润年
{
a=1;
}
neebeen 2004-11-21
  • 打赏
  • 举报
回复
我看他们都没有编译过,这是不负责的,都只是看看。当然你的程序不能够编译了。我看你还是好好的在看一下,你范了很多的错。你把这个看一下吧!!
# include <iostream.h>

class Tdate
{
public:
void print(); //打印日期
void dateinc(); //日期加一天
void data(int,int,int); //设置日期
private:
int month;
int day;
int year;
};

void Tdate::print() //成员函数的实现
{

cout<<"day/month/year"<<endl;
cout<<day<<"_"<<month<<"_"<<year<<endl;
}

void Tdate::data(int d,int m,int y) //设置日期成员函数
{
day=d;
month=m;
year=y;

cout<<"news date is :"<<endl;
cout<<day<<"_"<<month<<"_"<<year<<endl;
}

void Tdate::dateinc() //日期加一天成员函数
{ int a=0;
if (month==NULL||day==NULL||year==NULL)
cout<<"date is NULL";
else //处理日
{
if (!(year%4)&&(year%400)) //判断是润年
{
a=1;
}

if (day==30) //30号则小月份加一
{
switch(month)
{
case 2: day=1;month+=1;break;
case 4: day=1;month+=1;break;
case 6: day=1;month+=1;break;
case 9: day=1;month+=1;break;
case 11: day=1;month+=1;break;
default:day+=1;
}
}

else if (day==31) //31号则所有月份加一
{
day=1;
month+=1;
}

else if ((day==28 ||day==29)&&(a==1))
{
day=1;
month+=1;
}

else
{
day+=1;
}

if (month==12)
{
month=1;
year+=1;
}
else
{
month+=1;
}

}
}
void main()
{
Tdate a;
a.data(20,11,2004);
a.print();
a.dateinc();
a.print();
}

jsunnygirl 2004-11-21
  • 打赏
  • 举报
回复
程序可以运行,只是你的算法有问题
jsunnygirl 2004-11-21
  • 打赏
  • 举报
回复
zhkun9666() : 数据成员初始化时,它们的顺序必须与类中的声明顺序一致。
这是系统实现的吧,编译器在初始化成员的时候按照声名的顺序进行,但是你怎么写是无所谓的
zhkun9666 2004-11-21
  • 打赏
  • 举报
回复
我对这个程序有如下几点看法:(因在网吧,不能调试。如有误,请大虾改正。谢谢!)
1:case 2: day=1;month+=1;break; 这个语句是多余的,因为当day=2时,month不可能2.
2: 数据成员初始化时,它们的顺序必须与类中的声明顺序一致。

void Tdate::data(int m,int d,int y) //设置日期成员函数
{
month=m;
day=d;
year=y;

cout<<"news date is :"<<endl;
cout<<day<<"_"<<month<<"_"<<year<<endl;
}

main()函数中的调用也要做相应的改动。
3。由于没有定义构造函数,系统会提供一个默认的构造函数,但是其数据成员的值为随机的!!!
huailt 2004-11-21
  • 打赏
  • 举报
回复
不需要构造.你已经用成员函数进行初始化了.在最后是少了个}喔,你自己被IF晕了吧.呵呵
加上}就OK了
加载更多回复(7)

64,648

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧