有关写入访问权限冲突问题
//代码如下,运行会报错“写入访问权限冲突”,哪位大神能帮忙看一下,感激不尽/*建立一个简单的学校人员管理系统,包括对学生、员工和在职学生(既是员工又是学生)的管理。需要完成如下功能:
1、建立一个School类,在其中定义增加人员的Append函数。
2、建立一个基类Person类,要具有姓名和性别的属性,并把输出函数ShowMe()定义为虚函数;
3、建立一个员工Staff类和一个学生类Student,均由Person继承而来。要求可以输出员工类(学生类)对象的属性(姓名、性别和工作证号码(或学生学号),分别写出对ShowMe()函数的具体实现。
4、建立一个在职学生类Staff_Student类,由员工类和学生类继承而来。写出对ShowMe()函数的具体实现,可以输出对象属性,。
5、重载,实现用cin为员工类、学生类和在职学生类对象赋值。
6、编写main()主函数,测试上述功能。*/
#include <iostream>
#include <string>
using namespace std;
class Person
{
public:
Person(string name1 = "", char s = 'M')
{
name = name1;
sex = s;
}
virtual void ShowMe();
friend istream& operator>>(istream& in, Person& p);
protected:
char sex;
string name;
};
void Person::ShowMe()
{
//按照输出要求完成此处的功能
cout << "姓名:" << name << endl;
cout<< "性别:" << sex << endl;
}
//完成cin输入的运算符重载
istream& operator>>(istream& in, Person& p) {
in >> p.sex >> p.name;
return in;
}
class Staff :virtual public Person //按照输出要求完成此处
{
protected:
int wID; //工作号
public:
Staff(int id = 0, string name1 = "", char s = 'M') :Person(name1, s){
wID = id;
}
virtual void ShowMe();
friend istream& operator>>(istream& in, Staff& p);
};
void Staff::ShowMe()
{
//按照输出要求完成此处的功能
Person::ShowMe();
cout << "工号:" << wID << endl;
}
//完成cin输入的运算符重载
istream& operator>>(istream& in, Staff& p) {
in >> p.sex >> p.name >> p.wID;
return in;
}
class Student :virtual public Person //按照输出要求完成此处
{
protected:
int sID; //学号
public:
Student(int id = 0, string name1 = "", char s = 'M') :Person(name1, s){
sID = id;
}
virtual void ShowMe();
friend istream& operator>>(istream& in, Student& p);
};
void Student::ShowMe()
{
//按照输出要求完成此处的功能
cout << "姓名:" << name << endl;
cout << "性别:" << sex << endl;
cout << "学号:" << sID << endl;
}//完成cin输入的运算符重载
istream& operator>>(istream& in, Student& p) {
in >> p.sex >> p.name >> p.sID;
return in;
}
class Staff_Student :public Staff,public Student//按照输出要求完成此处
{
public:
Staff_Student(string name1 = "", char s = 'M', int id1 = 0, int id2 = 0) :Person(name1, s), Student(id1, name1, s), Staff(id2, name1, s)
{ };
virtual void ShowMe();
friend istream& operator>>(istream& in, Staff_Student& p);
};
void Staff_Student::ShowMe()
{
//按照输出要求完成此处的功能
Student::ShowMe();
cout << "工号:" << wID<<endl;
}
//完成cin输入的运算符重载
istream& operator>>(istream& in, Staff_Student& p) {
in >> p.Person::sex >> p.Person::name >> p.sID>>p.wID;
return in;
}
class School
{
private:
Person* p[100];
int size;
public:
School();
~School()
{
}
void append(Person&);
void display();
};
School::School()
{
size = 0;
}
void School::append(Person& p1)
{
//按照输出要求完成此处
*p[size] = p1;
size++;
}
void School::display()
{
int i;
for (i = 0; i < size; i++)
p[i]->ShowMe();
}
int main()
{
School sch;
Staff s1;
cin >> s1;
sch.append(s1);
Student st1;
cin >> st1;
sch.append(st1);
Staff_Student ss1("SS1", 'F', 1001, 1003);
cin >> ss1;
sch.append(ss1);
sch.display();
return 0;
}