SDUSTOJ1780 Problem E: 选举班干部了!

Description

新学期伊始,某班要通过竞争上岗方式竞选班干部。包括班长、团支书等。现在需要你来设计2个类Student和StudentCadre来模拟这一过程。

1.Student类是学生类,包括

(1)属性:string name——姓名。bool sex——性别。int grade——年级。Student
*next——指向下一个学生指针。

(2)方法:

构造函数Student(string _name, bool _sex, int_grade)——初始化一个对象。注意:其中的next初始化为NULL。
析构函数。
void showInfo()——输出一个学生的信息。next除外。
Student* getNext()——获得next指针。
void setNext(Student*)——设置next指针指向对象。
2. StudentCadre类是Student类的派生类,包括:

(1)属性:string position——表示竞聘岗位。

(2)方法:
StudentCadre(string _name, bool _sex, int _grade, string pos)——构造函数,初始化各种属性。
析构函数。
void showInfo()——显示信息。
构造函数和析构函数都有输出,具体见样例。

Input

输入有多行。

第1行有4部分:姓名、性别(0或1)、年级(整数)和岗位。

第2行是一个正整数N,表示有N个学生支持该人竞聘相应岗位。之后有N行,每行有3个部分,分别是一个学生的姓名、性别和年级。

Output

见样例。

Sample Input

Tom 0 2015 Monitor
3
Jack 1 2015
Mary 0 2015
Sherry 1 2015
Sample Output
A student named by Tom is created!
A student cadre with position Monitor is created.
A student named by Jack is created!
A student named by Mary is created!
A student named by Sherry is created!
name = Tom, sex = 0, grade = 2015; position = Monitor.
name = Jack, sex = 1, grade = 2015;
name = Mary, sex = 0, grade = 2015;
name = Sherry, sex = 1, grade = 2015;
A student named by Tom is erased.
A student named by Jack is erased.
A student named by Mary is erased.
A student named by Sherry is erased.

HINT

string类是C++提供的类,在头文件string中,可以用#include < string >来使用这个类。该类的对象可以直接利用赋值运算符(=)进行复制,也可以直接利用cout输出,或利用cin输入。

Append Code

append.cc,

标程

#include <bits/stdc++.h>
using namespace std;
 
class Student {
    private:
        string name;
        bool sex;
        int grade;
        Student *next;
    public:
        Student(string s, bool se, int g):name(s), sex(se), grade(g), next(NULL) {
            cout << "A student named by " << name << " is created!\n";
        }
        ~Student() {cout << "A student named by " << name << " is erased." << endl;}
        void showInfo() {cout << "name = " << name <<", sex = " << sex << ", grade = " << grade << ";";}
        Student* getNext() {return next;}
        void setNext(Student* s) {next = s;}
        string getn() {return name;}
        bool getse() {return sex;}
        int getg() {return grade;}
};
 
class StudentCadre: public Student {
    public:
        StudentCadre(string s, bool se, int g, string p):Student(s, se, g), position(p) {
            cout << "A student cadre with position " << position << " is created." << endl;
        }
        ~StudentCadre(){
            cout<<"A student named by " << getn() << " is erased." << endl;
        };
        void showInfo(){
            cout<<"name = " << getn()<<", sex = "<<getse()<<", grade = "<<getg()<<"; position = "<<position<<".";
        }
    private:
        string position;
};
 
int main()
{
    int num;
    string name, position;
    bool sex;
    int grade;
    Student *header, *student, *curStudent;
 
    cin>>name>>sex>>grade>>position;
    header = new StudentCadre(name, sex, grade,position);
    curStudent = header;
    cin>>num;
    for (int i = 0; i < num; i++)
    {
        cin>>name>>sex>>grade;
        student = new Student(name, sex, grade);
        curStudent -> setNext(student);
        curStudent = curStudent -> getNext();
    }
    ((StudentCadre*)header) -> showInfo();
    cout<<endl;
    curStudent = header;
    while (curStudent -> getNext() != NULL)
    {
        curStudent = curStudent -> getNext();
        curStudent->showInfo();
        cout<<endl;
    }
 
    curStudent = header;
    while (curStudent != NULL)
    {
        student = curStudent;
        curStudent = curStudent -> getNext();
        delete student;
    }
    return 0;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值