构造函数,析构函数,拷贝构造函数
可以设断点,然后一步一步看,这样比较容易懂
慢慢来,会好的
#include<iostream>
using namespace std;
class MyDate
{public://如果不写public就会默认为private
MyDate()//显示默认构造函数
{
}
MyDate(int x,int y,int z)//构造函数,显示构造函数会覆盖默认的构造函数
{
year = x;
month = y;
day = z;
}
MyDate(const MyDate &d)//拷贝构造函数
{
year = d.year;
month = d.month;
day = d.day;
}
void InitMyDate()
{
cout << "year " << "month " << "day " << endl;
cin >> year;
cin >> month;
cin >> day;
}
bool IsLeapYear()
{
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
return true;
else
return false;
}
void PrintMyDate()
{
cout << year <<"年"<< month<<"月" << day <<"日"<< endl;
}
int GetYear()//为了获得year,可以使用此公开成员函数
{
return year;
}
~MyDate()//析构函数
{
cout<<"调用析构函数"<<endl;
}
private:
int year;
int month;
int day;
};
void print()
{
MyDate date2(2019,8,23);//调用构造函数
date2.PrintMyDate() ;
}//调用析构函数
int main()
{
MyDate date4;//因为前边已经有显示默认构造函数,所以编译不会报错
//会使用默认初始化,如果输出,会出现乱码
MyDate date1(2020, 10, 10);//MyDate date1;写成这种形式,编译器会报错:不存在默认构造函数
date1.PrintMyDate();
date1.InitMyDate();//会覆盖2020 12 12
date1.PrintMyDate();
if (date1.IsLeapYear() == 1)
cout << date1.GetYear() << "是闰年" << endl;//date1.year是不对的,year是私有成员,此处已经是类外
else
cout << date1.GetYear() << "不是闰年" << endl;
MyDate date3 = date1;//调用拷贝构造函数
date3.PrintMyDate();
//MyDate date3;这个调用默认构造函数,不会调用拷贝构造函数
//date3 = date1;这个调用赋值操作符
print();
system("pause");
return 0;
}
结果如下图: