65,186
社区成员




#include<iostream>
using namespace std;
class Date
{
public:
Date(int _year = 1900, int _month = 1, int _day = 1)
{
year = _year;
month = _month;
day = _day;
}
void Show()
{
cout << year <<"/"<< month <<"/"<<day << endl;
}
int Getyear()
{
return year;
}
int Getmonth()
{
return month;
}
int Getday()
{
return day;
}
void setyear(int _year)
{
year = _year;
}
void setmonth(int _month)
{
month = _month;
}
void setday(int _day)
{
day = _day;
}
private:
int year,month,day;
};
class Time
{
public:
Time(int _hour = 0, int _minute = 0, int _second = 0)
{
hour= _hour;
minute = _minute;
second = _second;
}
Time(int x)//转换构造函数
{
minute = x/ 60;
hour = x / 60;
second = x - hour * 60 * 60 - minute * 60;
}
void Show()
{
cout << hour << ":" << minute << ":" << second << endl;
}
int Gethour()
{
return hour;
}
int Getminute()
{
return minute;
}
int Getsecond()
{
return second;
}
void sethour(int _hour)
{
hour = _hour;
}
void setminute(int _minute)
{
minute = _minute;
}
void setsecond(int _second)
{
second = _second;
}
private:
int hour, minute, second;
};
class DateTime
{
public:
DateTime(Date _d, Time _t)//形参为类的构造函数
{
d = _d;
t = _t;
}
DateTime(int year=1900,int month=1,int day=1,int hour=0,int minute=0,int second=0)
{
d.setyear(year);
d.setmonth(month);
d.setday(day);
t.sethour(hour);
t.setminute(minute);
t.setsecond(second);
}
void Show()
{
cout << d.Getyear() << "/" << d.Getmonth()<< "/" << d.Getday()<< " " << t.Gethour()<< ":" << t.Getminute()<< ":" << t.Getsecond()<<endl;
}
void AddSecond();
private:
Date d;
Time t;
};
void DateTime::AddSecond()
{
int year, month, day, hour, minute, second;
year = d.Getyear();
month = d.Getmonth();
day = d.Getday();
hour = t.Gethour();
minute = t.Getminute();
second = t.Getsecond();
second++;
if (second == 60) //时间
{
second = 0;
minute++;
if (minute == 60)
{
minute = 0;
hour++;
if (hour == 24)
{
hour = 0;
day++;
}
}
}
if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12) //每月有31天的
{
if (day == 31 + 1)
{
day = 1;
month++;
}
}
if (month == 4 || month == 6 || month == 9 || month == 11)//每月有30天的
{
if (day == 30 + 1)
{
day = 1;
month++;
}
}
if (month == 2)
{
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) //闰年
{
if (day == 29 + 1)
{
day = 1;
month++;
}
}
else //平年
{
if (day == 28 + 1)
{
day = 1;
month++;
}
}
}
if (month == 13)
{
month = 1;
}
d.setyear(year);
d.setmonth(month);
d.setday(day);
t.sethour(hour);
t.setminute(minute);
t.setsecond(second);
}
void main()
{
Date d(2016, 2, 29);
d.Show(); //显示:2016/02/29
Time t(23, 59, 59);
t.Show(); //显示:23:59:59
DateTime dt1(d, t);
dt1.Show(); //显示:2016/02/29 23:59:59
dt1.AddSecond(); //dt1的值改为增加1秒后的日期时间
dt1.Show(); //显示:2016/03/01 00:00:00
DateTime dt2; //默认构造函数
dt2.Show(); //显示:1900/01/01 00:00:00
DateTime dt3(1998, 3, 18, 13, 30, 0); //带参数构造函数
dt3.Show(); //显示:1998/03/18 13:30:00
t=1234; //类型转换,t得到一天中第1234秒的时间
t.Show(); //显示: 00:20:34
}
#include
using namespace std;
class Fract
{
public:
Fract()
{
den=0;
num=1;
}
Fract(int n)
{
den = n;
num = 1;
}
Fract(int den,int num)
{
this->den = den;
this->num = num;
}
void Show()
{
cout<< this->den <<"/"<<this->num<<endl;
}
private:
int den; //fenzi
int num; //fenmu
};
void main()
{
Fract f1(5),f2(1,3),f3;
f1.Show();
f1 = 7; //类型转换
f1.Show();
}
[/quote]
String a = "1232423";
== String a= String("1232423");#include
using namespace std;
class Fract
{
public:
Fract()
{
den=0;
num=1;
}
Fract(int n)
{
den = n;
num = 1;
}
Fract(int den,int num)
{
this->den = den;
this->num = num;
}
void Show()
{
cout<< this->den <<"/"<<this->num<<endl;
}
private:
int den; //fenzi
int num; //fenmu
};
void main()
{
Fract f1(5),f2(1,3),f3;
f1.Show();
f1 = 7; //类型转换
f1.Show();
}
[/quote]
嗯,编译器会自动7调用构造函数Fract(int)构造一个临时变量后再赋值给f1,即f1=Fract(7);
前面那代码应该也是
Time t;
t=1234; //本来也会自动变为t=Time(1234)的,但由于Time(int _hour = 0, int _minute = 0, int _second = 0)和Time(int)两个构造函数都可以选,所以编译器不知道选哪个构造函数,于是就只能去找=操作符了,但=操作符又没重载就报错了。#include
using namespace std;
class Fract
{
public:
Fract()
{
den=0;
num=1;
}
Fract(int n)
{
den = n;
num = 1;
}
Fract(int den,int num)
{
this->den = den;
this->num = num;
}
void Show()
{
cout<< this->den <<"/"<<this->num<<endl;
}
private:
int den; //fenzi
int num; //fenmu
};
void main()
{
Fract f1(5),f2(1,3),f3;
f1.Show();
f1 = 7; //类型转换
f1.Show();
}
[/quote]
先类型转换,再拷贝赋值。
拷贝赋值的 operator = 编译通常会自动生成一个。#include
using namespace std;
class Fract
{
public:
Fract()
{
den=0;
num=1;
}
Fract(int n)
{
den = n;
num = 1;
}
Fract(int den,int num)
{
this->den = den;
this->num = num;
}
void Show()
{
cout<< this->den <<"/"<<this->num<<endl;
}
private:
int den; //fenzi
int num; //fenmu
};
void main()
{
Fract f1(5),f2(1,3),f3;
f1.Show();
f1 = 7; //类型转换
f1.Show();
}
[/quote]
那你把 Time(int _hour = 0, int _minute = 0, int _second = 0) 改成 Time(int _hour, int _minute, int _second)
否则单你只有一个参数的时候,他不知道是调用Time(int _hour = 0, int _minute = 0, int _second = 0),还是调用Time(int x)#include
using namespace std;
class Fract
{
public:
Fract()
{
den=0;
num=1;
}
Fract(int n)
{
den = n;
num = 1;
}
Fract(int den,int num)
{
this->den = den;
this->num = num;
}
void Show()
{
cout<< this->den <<"/"<<this->num<<endl;
}
private:
int den; //fenzi
int num; //fenmu
};
void main()
{
Fract f1(5),f2(1,3),f3;
f1.Show();
f1 = 7; //类型转换
f1.Show();
}