下面代码中两个输出运算符重载无法实现,应该怎么解决
#include<iostream>
#define defaultValue "0"
using namespace std;
class Person{
protected:
string m_strName;
public:
Person() { cout << "Person constructing" << endl; }
~Person() { cout << "Person destructing" << endl; }
Person(const string&);
friend ostream& operator<<(ostream&, const Person&);
friend istream& operator>>(istream&, Person&);
};
class Student:public Person {
static int m_nLastID;
public:
Student() {
cout << "Student constructing" << endl;
m_strSID = ++m_nLastID;
}
~Student(){ cout << "Student destructing" << endl; }
Student(const string&name);
string m_strSID= defaultValue;
friend ostream& operator<<(ostream&, const Student&);
friend istream& operator>>(istream&, Student&);
};
#include "Person.h"
ostream & operator<<(ostream &o, const Person &p)
{
o << p.m_strName;
return o;
}
istream & operator>>(istream &i, Person &p)
{
char a[256];
i >> a;
p.m_strName = a;
return i;
}
ostream & operator<<(ostream &o, const Student &s)
{
o << s.Person::m_strName<<' '<<s.m_strSID;
return o;
}
istream & operator>>(istream &i, Student &s)
{
char a[256]{0};
i >> a;
s.Person::m_strName = a;
return i;
}
Person::Person(const string &s)
{
m_strName = s;
}
Student::Student(const string & name)
{
m_strName = name;
}