C++输入重载小问题

来源:百度知道 编辑:UC知道 时间:2024/06/04 07:40:23
#include<iostream>
using namespace std;

class Date
{
private:
char *month;
int month1;
int day;
long year;
public:
Date(int month1=1,int day=1,long year=2007)
{
this->month1=month1;
this->day=day;
this->year=year;
}
Date(char *month1,int day=1,long year=2007)
{
month=month1;
this->day=day;
this->year=year;
}

~Date()
{}

void show(int,int,long)
{
cout<<month1<<"/"<<day<<"/"<<year<<endl;
}
void show(char *,int,long)
{
cout<<month<<" "<<day<<","<<year<<endl;
}

};

void main()
{
Date z1(4,27,2007),z2("April",27,2007);
z1.show();
z2.show();
}
显示z1.show();z2.show()有问题,大虾们帮忙看下,谢谢。

z1.show(1,0,0); //给3个int型的,匹配全int参数的
z2.show(" ",0,0);//给第一个char*类型,匹配带char*参数那个函数

你的类里面show 函数不用带参数
void show()
{
cout<<month1<<"/"<<day<<"/"<<year<<endl;
}
void show(char* )
{
cout<<month<<" "<<day<<","<<year<<endl;
}

};
main()函数里面
z1.show();
z2.show(NULL);

1. 在 Date 类里定义的:show 函数需要补全“形式参数”的名字,或者去掉“参数的类型声明”。
2. month 在 Date 类里定义为指针,在构造 Date 对象 z2 的时候,它直接指向一个临时的“常量字符串”,由于没有明确地开辟:存储空间,这个指针有危险,所以:需要根据构造函数里, 实际字符串的长度,为 month 开辟一块等长的空间,并且把 "April" 拷贝到 month 指向的空间里;需要注意的是:在析构函数 ~Date() 里面,如果发现 month 已经不为空,就需要释放这段空间。

show函数中是有参数的,而调用的时候没有给实参!