拷贝构造函数的问题
我从书上看了一个程序,自己运行一下,总是不能编译,麻烦大家帮我看看错误在哪啊?
#include <iostream.h>
class CDate
{
public:
CDate(int year=2007,int month=3,int day=20)
{
cout < < "调用构造函数 " < <endl;
nYear=year; nMonth=month; nDay=day;
cout < <nYear < < "- " < <nMonth < < "- " < <nDay < <endl;
}
CDate(const CDate &ymd)
{
cout < < "调用拷贝构造函数 " < <endl;
cout < <ymd.nYear < < "- " < <ymd.nMonth < < "- "ymd.nDay < <endl;
}
private:
int nYear,nMonth,nDay;
};
void main()
{
CDate day1(2002,8);
CDate day2(day1);
}
[解决办法]
CDate(const CDate &ymd)
{
nYear=ymd.nYear; nMonth=ymd.nMonth; nDay=ymd.nDay;
cout < < "调用拷贝构造函数 " < <endl;
cout < <ymd.nYear < < "- " < <ymd.nMonth < < "- "ymd.nDay < <endl;
}
[解决办法]
int nYear,nMonth,nDay;是private,用ymd是不能直接访问的。应该是
CDate(const CDate &ymd)
{
nYear=ymd.nYear; nMonth=ymd.nMonth; nDay=ymd.nDay;
cout < < "调用拷贝构造函数 " < <endl;
cout < <nYear < < "- " < <nMonth < < "- "nDay < <endl;
}
[解决办法]
CDate(const CDate &ymd)
{
cout < < "调用拷贝构造函数 " < <endl;
cout < <ymd.nYear < < "- " < <ymd.nMonth < < "- "ymd.nDay < <endl; //此行有错误
}
cout < <ymd.nYear < < "- " < <ymd.nMonth < < "- " < <ymd.nDay < <endl;
[解决办法]
14行错了:
原:cout < <ymd.nYear < < "- " < <ymd.nMonth < < "- "ymd.nDay < <endl;
改为:cout < <ymd.nYear < < "- " < <ymd.nMonth < < "- " < <ymd.nDay < <endl;
再有你的拷贝构造函数实现不对
[解决办法]
CDate(const CDate &ymd)
{
cout < < "调用拷贝构造函数 " < <endl;
cout < <ymd.nYear < < "- " < <ymd.nMonth < < "- " < <ymd.nDay < <endl;
}
[解决办法]
你的 16行还是错的,改成这样
cout < <ymd.nYear < < "- " < <ymd.nMonth < < "- " < <ymd.nDay < <endl;
[解决办法]
直接把int nYear,nMonth,nDay;改为public或添加公有函数,我上面的也有问题。