标题:有关写入访问权限冲突问题
只看楼主
小阿威
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2020-3-17
结帖率:0
已结贴  问题点数:20 回复次数:2 
有关写入访问权限冲突问题
//代码如下,运行会报错“写入访问权限冲突”,哪位大神能帮忙看一下,感激不尽
/*建立一个简单的学校人员管理系统,包括对学生、员工和在职学生(既是员工又是学生)的管理。需要完成如下功能:
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;
}
搜索更多相关主题的帖子: Student 学生 void 输出 Person 
2020-05-12 17:33
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
得分:20 
*p[size] = p1;
p[size]是野指针 不能 *

https://zh.
2020-05-13 09:13
苏幕遮0612
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2020-11-16
得分:0 
回复 楼主 小阿威
*p[size] = p1; 改成 p[size] = &p1 ;
2020-11-16 20:59



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-501573-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.129256 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved