已知学生类(Student)和日期类(Date)声明如下: class Date { int m_year, m_month, m_day; public: Date(int y=2000,int m=1, int d=1); //初始化 friend istream& operator>>(istream &in, Date &date); friend ostream& operator<<(ostream &out,Date &date); }; class Student { int m_id{}; string m_name{}; Date m_birthday; public: Student(int id = 1001,string name="Li",int y=2000,int m=1,int d=1); friend istream& operator>>(istream &in, Student &s); friend ostream&operator<<(ostream &out, Student &s); }; 试实现上述两个类的定义,在主函数中定义学生对象,输入该学生信息,输出其默认信息和更新后的信息。 Input 学生的基本信息,格式见样例。 Output 先输出学生的默认信息,再输出更新后的信息。 Sample Input 1 1002 Wang 1999 6 18 Sample Output 1 1001 Li 2000/1/1 1002 Wang 1999/6/18用C++写出此代码
时间: 2024-02-01 07:04:42 浏览: 33
下面是完整的代码实现:
```
#include <iostream>
#include <string>
using namespace std;
class Date
{
int m_year, m_month, m_day;
public:
Date(int y = 2000, int m = 1, int d = 1); //初始化
friend istream& operator>>(istream& in, Date& date);
friend ostream& operator<<(ostream& out, Date& date);
};
Date::Date(int y, int m, int d)
{
m_year = y;
m_month = m;
m_day = d;
}
istream& operator>>(istream& in, Date& date)
{
in >> date.m_year >> date.m_month >> date.m_day;
return in;
}
ostream& operator<<(ostream& out, Date& date)
{
out << date.m_year << "/" << date.m_month << "/" << date.m_day;
return out;
}
class Student
{
int m_id{};
string m_name{};
Date m_birthday;
public:
Student(int id = 1001, string name = "Li", int y = 2000, int m = 1, int d = 1);
friend istream& operator>>(istream& in, Student& s);
friend ostream& operator<<(ostream& out, Student& s);
};
Student::Student(int id, string name, int y, int m, int d) : m_id(id), m_name(name), m_birthday(y, m, d)
{
}
istream& operator>>(istream& in, Student& s)
{
in >> s.m_id >> s.m_name >> s.m_birthday;
return in;
}
ostream& operator<<(ostream& out, Student& s)
{
out << s.m_id << " " << s.m_name << " " << s.m_birthday;
return out;
}
int main()
{
Student stu;
cin >> stu;
cout << stu << endl;
return 0;
}
```
在主函数中,先定义了一个学生对象 stu,然后通过 cin 输入学生信息,再通过 cout 输出默认信息和更新后的信息。其中,输入和输出均使用了重载运算符 >> 和 <<。由于 Date 类的默认输出格式与要求不同,因此在输出 Date 对象时需要进行一些格式转换。