c++类的多个构造函数

#include<iostream>
using namespace std;
class date
{
int day,month,year;
public:
date(char *str);
date(int m,int d,int y);
date::date();
void show();
};
date::date(char *str)
{
scanf(str,"%d%*c%d%*c%d",&month,&day,&year);
}
date::date(int m,int d,int y)
{
day=d;
month=m;
year=y;
}
date::date()
{
cout<<"Enter month_day_year:";
cin>>day;
cin>>month;
cin>>year;
}
void date::show()
{
cout<<month<<'/'<<day<<'/';
cout<<year<<'\n';
}
main()
{
//构造函数的参数为字符串类型
date sdate("11/1/1999");
//构造函数的参数为三个整数
date idate(12,2,1998);
//构造函数没有参数,数据通过键盘直接输入
date indate;
sdate.show();
idate.show();
indate.show();
return 0;
}

你的程序的不足是构造函数date(char *str) 中没有把字符串str中的月、日、年分开,然后赋给成员month、day和year,所以系统输出随机值!

想要实现你的功能,参看下面这个程序!已编译运行。

#include <stdlib.h> //加头文件,包含函数 atoi()
#include <string> //加头文件,包含string类
#include <iostream>
using namespace std;

class date
{
int day,month,year;
public:
date(char *str);
date(int m,int d,int y);
date::date();
void show();
};
date::date(char *str)
{
// str = " 11/1/1999";
string m(str+0,str+2); //截取字符串str中的1、2个字符
string d(str+3,str+4); //截取字符串str中的3个字符
string y(str+5,str+9); //截取字符串str中的5、6、7、8个字符

month = atoi( m.c_str() ); //m.c_str() 把string类型的字符串转化为 char*类型
day = atoi( d.c_str() ); // atoi( d.c_str() ) 把字符串char*转化为整数int类型
year = atoi( y.c_str() );
}
date::date(int m,int d,int y)
{
day=d;
month=m;
year=y;
}

date::date()
{
cout<<"Enter month_day_year:"<<endl; //这里加endl,便于输出观察
cin>>day;
cin>>month;
cin>>year;
}
void date::show()
{
cout<<month<<'/'<<day<<'/';
cout<<year<<'\n';
}
main()
{
//构造函数的参数为字符串类型
date sdate("11/1/1999");
//构造函数的参数为三个整数
date idate(12,2,1998);
//构造函数没有参数,数据通过键盘直接输入
date indate;
sdate.show();
idate.show();
indate.show();
return 0;
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-03-08
#include <iostream>
#include <cstring>
using namespace std;
class date
{
int day,
month,
year;
public:
date();
date(char *str);
date(int m,int d,int y);

void show();
};

date::date(char *str)
{
cout<<"Enter month_day_year:";
scanf("%d%*c%d%*c%d",&month,&day,&year);
}
date::date(int m,int d,int y)
{
day=d;
month=m;
year=y;
}
date::date()
{
cout<<"Enter month_day_year:";
cin>>day;
cin>>month;
cin>>year;
}
void date::show()
{
cout<<month<<'/'<<day<<'/';
cout<<year<<'\n';
}
main()
{
//构造函数的参数为字符串类型
date sdate("11/1/1999");
//这里会传递“11/1/1999”给你定义的形式参数str,但是没有实际的意义。
//“11/1/1999”不能传递给你的私有成员变量

//构造函数的参数为三个整数
date idate(12,2,1998);

//构造函数没有参数,数据通过键盘直接输入 ,就是使用默认构造函数。
date indate;

sdate.show();
idate.show();
indate.show();
return 0;
}
第2个回答  2009-03-08
#include<iostream>
using namespace std;
class date
{
int day,month,year;
public:
date(char *str);
date(int m,int d,int y);
date();
void show();
};
date::date(char *str)
{
scanf(str,"%d%*c%d%*c%d",&month,&day,&year); //此处有错误,month,day,year没有被赋值。
}
date::date(int m,int d,int y)
{
day=d;
month=m;
year=y;
}
date::date()
{
cout<<"Enter month_day_year:";
cin>>day;
cin>>month;
cin>>year;
}
void date::show()
{
cout<<month<<'/'<<day<<'/';
cout<<year<<'\n';
}
int main()
{
//构造函数的参数为字符串类型
date sdate("11/1/1999");
//构造函数的参数为三个整数
date idate(12,2,1998);
//构造函数没有参数,数据通过键盘直接输入
date indate;
sdate.show();
idate.show();
indate.show();
return 0;
}本回答被提问者采纳
第3个回答  2009-03-08
有什么问题吗?
相似回答