您的位置:首页 > 编程语言 > C语言/C++

【c++】关于类继承运算符重载友元函数

2014-01-05 19:37 302 查看
/*以下代码在vc++6.0中通不过
并不意味代码有误,请更换编译
器运行---枯等街寒又何妨2014/01/05*/
#include<iostream>
#include<iomanip>
using namespace std;
class Time
{
public:
void set_time(int,int,int);
Time(int y=0,int m=0 ,int d=0 );
void display(void);
Time operator++();
Time operator--(int);
friend ostream &operator<<(ostream &out,Time &t);
private:
int year;
int month;
int day;
};
class Date:public Time
{
public:
Date(int y,int m1,int d,int h,int m2,int s);
void set_date(int,int,int,int,int,int);
void display(void);

private:
int hour;
int minute;
int second;
};
Time::Time(int y,int m,int d) //构造函数
{
set_time(y,m,d);
}

void Time::set_time(int y,int m,int d)  //成员函数
{
year=y;
month=m;
day=d;
}

void Time ::display(void)
{
cout<<"year:"<<setfill('0')<<setw(4)<<year;
cout<<"\tmonth:"<<setw(2)<<setfill('0')<<month;
cout<<"\tday:"<<setw(2)<<setfill('0')<<day<<endl;
}
Time Time::operator++()    //重载++前置运算符
{
return Time(year,month,++day); //注意不要写成day+1,因为这样不会改
//变day的值,Time的值不会发生任何的变化
}

Time Time::operator --(int) //重载--后置运算符
{
Time temp(*this);
day--;
return temp;
}

ostream& operator<<(ostream &out,Time &t)
{
out<<"year:"<<t.year<<"\tmonth:"<<t.month<<"\tday:"<<t.day<<endl;
return out;
}

Date::Date(int y,int m1,int d,int h,int m2,int s):Time(y,m1,d)
{
hour=h;
minute=m2;
second=s;
}

void Date::set_date(int y,int m1,int d,int h,int m2,int s)
{
Time::set_time(y,m1,d);
hour=h;
minute=m2;
second=s;
}

void Date::display(void )
{
Time::display();
cout<<"hour:"<<setw(2)<<setfill('0')<<hour;
cout<<"\tminute:"<<setw(2)<<setfill('0')<<minute;
cout<<"\tsecond:"<<setw(2)<<setfill('0')<<second<<endl;
}

int main()
{
Time time_1(2014,1,5), time_2;
time_2.set_time(1900,1,1);
time_1.display();
time_2.display();
++time_1;//等价于time_1.operator++();
time_1.display();
(time_1--).display();
time_1.display();
cout<<time_1;
Date date1(2014,1,5,19,16,10),date2;
date1.display();
system("pause");
return 1;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  继承 c++ iostream class