鱼C论坛

 找回密码
 立即注册
查看: 1675|回复: 8

大佬,求求了,在线等,急QAQ

[复制链接]
发表于 2020-5-15 23:31:37 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
/*
**程序说明:考察“继承和派生”、“动态多态性”的原理、机制和实现
1)类的继承结构:基类Account是其直接公有派生类TeacherAccountStudentAccount的虚基类,而OnJobPostgraduateAccount类是Teacher类和Student类的共同直接公有派生类。
2)在主函数中,使用基类Account的指针分别指向派生类TeacherAccountStudentAccountOnJobPostgraduateAccount的对象,并调用“虚函数”实现“动态多态”。
**作业要求:首先阅读并分析已给代码,然后将程序补充完整,最后运行程序得到如图1所示的屏幕输出结果和如图2所示的文件输出结果。
*/
#include <iostream>
#include <fstream>
#include <string>
using namespace std;

typedef enum{TEACHER, STUDENT, ONJOBPOSTGRADUATE} Role;
string role[] = {"Teacher", "Student", "OnJobPostGraduate"};
typedef enum{MALE, FEMALE} Sex;
string sex[] = {"Male", "Female"};
typedef enum{ASSISTANT, LECTURER, APROFESSOR, PROFESSOR} Position;
string position[] = {"Assistatn", "Lecturer", "AProfessor", "Professor"};
typedef enum{CS, EE, CE} Major;
string major[]={"CS", "EE", "CE"};
typedef struct Identity {
    string _name;
    Sex _sex; //enum{MALE, FEMALE} Sex
    int _age;
    Role _role; //enum{TEACHER, STUDENT, ONJOBPOSTGRADUATE} Role
    int _number;
    string _department;
} Id;

class Account {
private:
    Id id;
public:
    Account(Id);
    ~Account();
    void setRole();
    /******补充成员函数声明******/

    /****************************/
};
Account::Account(Id i): id(i) {}
Account::~Account() {}
void Account::setRole() {
    cout << "Input role (0-Teacher/1-Student/2-OnJobPostGraduate): ";
    int x;
    cin>>x;
    switch(x) {
        case 0: id._role = TEACHER; break;
        case 1: id._role = STUDENT; break;
        case 2: id._role = ONJOBPOSTGRADUATE; break;
    }
}
void Account::showId() {
    cout << "name: " << id._name << '\n'
        << "sex: " << sex[id._sex] << '\n'
        << "age: " << id._age << '\n'
        << "role: " << role[id._role] << '\n'
        << "number: " << id._number << '\n'
        << "department: " << id._department << endl;
}
void Account::writeToFile() {
    ofstream outFile("res.txt");
    outFile << "name: " << id._name << '\n'
            << "sex: " << sex[id._sex] << '\n'
            << "age: " << id._age << '\n'
            << "role: " << role[id._role] << '\n'
            << "number: " << id._number << '\n'
            << "department: " << id._department << endl;
    outFile.close();
}

/******补充TeacherAccount类的头部******/

/************************/
{
private:
    Position pos; //enum{ASSISTANT, LECTURER, APROFESSOR, PROFESSOR} Position
public:
    TeacherAccount(Id, Position);
    ~TeacherAccount();
    string& getPosition();
    void showPosition();
    /******补充成员函数声明******/

    /****************************/
};
/******定义TeacherAccount类的构造函数******/

/******************************/
TeacherAccount::~TeacherAccount() {}
string& TeacherAccount::getPosition() {
    return position[pos];
}
void TeacherAccount::showPosition() {
    cout << "position: " << position[pos] << endl;
}
void TeacherAccount::showId() {
    Account::showId();
    showPosition();
}

/******补充StudentAccount类的头部******/

/************************/
{
private:
    Major maj; //enum{CS, EE, CE} Major
public:
    StudentAccount(Id, Major);
    ~StudentAccount();
    string& getMajor();
    void showMajor();
    /******补充成员函数声明******/

    /****************************/
};
/******定义StudentAccount类的构造函数******/

/******************************/
StudentAccount::~StudentAccount() {}
string& StudentAccount::getMajor() {
    return major[maj];
}
void StudentAccount::showMajor() {
    cout << "major: " << major[maj] << endl;
}
void StudentAccount::showId() {
    Account::showId();
    showMajor();
}

/******补充OnJobPostgraduateAccount类的头部******/

/************************/
{
public:
    OnJobPostgraduateAccount(Id, Position, Major);
    ~OnJobPostgraduateAccount();
    /******补充成员函数声明******/

    /****************************/
};
/******定义OnJobPostgraduateAccount类的构造函数******/

/******************************/
OnJobPostgraduateAccount::~OnJobPostgraduateAccount() {}
void OnJobPostgraduateAccount::showId() {
    Account::showId();
    showPosition();
    showMajor();
}
void OnJobPostgraduateAccount::writeToFile() {
    Account::writeToFile();
    ofstream outFile("res.txt", ios_base::app);
    outFile << "position: " << getPosition() << endl
            << "major: " << getMajor() << endl;
    outFile.close();
}

int main() {
    Id stud = {"Meng Chao", MALE, 18, STUDENT, 20190131, "Dep. of Computer"};
    Id tch = {"Zheng Xiao-hong", FEMALE, 25, TEACHER, 1000568, "Dep. of Computer"};

    StudentAccount s(stud, CS);
    TeacherAccount t(tch, LECTURER);
    OnJobPostgraduateAccount g(tch, LECTURER, EE);
    g.setRole(); //设置数据成员_roleOnJobPostgraduat

    /******定义基类Account的指针变量pt,并初始化为空指针******/

    /******pt进行赋值,实现对TeacherAccount类的showId成员函数的调用******/

    /********************/
    cout << endl;
    /******pt进行赋值,实现对StudentAccount类的showId成员函数的调用******/

    /********************/
    cout << endl;
    /******pt进行赋值,实现对OnJobPostgraduateAccount类的showId成员函数的调用******/

    /********************/
    pt->writeToFile();

    return 0;
}
file:///C:\Users\Lenovo\AppData\Local\Temp\ksohtml10148\wps1.jpg
1 屏幕输出内容
file:///C:\Users\Lenovo\AppData\Local\Temp\ksohtml10148\wps2.jpg
2 输出文件内容
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-5-15 23:32:18 | 显示全部楼层
这根本看不了啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-15 23:45:42 | 显示全部楼层
本帖最后由 aoki.A.Z 于 2020-5-15 23:48 编辑

/*
**程序说明:考察“继承和派生”、“动态多态性”的原理、机制和实现
(1)类的继承结构:基类Account是其直接公有派生类TeacherAccount和StudentAccount的虚基类,而OnJobPostgraduateAccount类是Teacher类和Student类的共同直接公有派生类。
(2)在主函数中,使用基类Account的指针分别指向派生类TeacherAccount、StudentAccount和OnJobPostgraduateAccount的对象,并调用“虚函数”实现“动态多态”。
**作业要求:首先阅读并分析已给代码,然后将程序补充完整,最后运行程序得到如图1所示的屏幕输出结果和如图2所示的文件输出结果。
*/
#include <iostream>
#include <fstream>
#include <string>
using namespace std;

typedef enum{TEACHER, STUDENT, ONJOBPOSTGRADUATE} Role;
string role[] = {"Teacher", "Student", "OnJobPostGraduate"};
typedef enum{MALE, FEMALE} Sex;
string sex[] = {"Male", "Female"};
typedef enum{ASSISTANT, LECTURER, APROFESSOR, PROFESSOR} Position;
string position[] = {"Assistatn", "Lecturer", "AProfessor", "Professor"};
typedef enum{CS, EE, CE} Major;
string major[]={"CS", "EE", "CE"};
typedef struct Identity {
    string _name;
    Sex _sex; //enum{MALE, FEMALE} Sex
    int _age;
    Role _role; //enum{TEACHER, STUDENT, ONJOBPOSTGRADUATE} Role
    int _number;
    string _department;
} Id;

class Account {
private:
    Id id;
public:
    Account(Id);
    ~Account();
    void setRole();
    /******补充成员函数声明******/

    /****************************/
};
Account::Account(Id i): id(i) {}
Account::~Account() {}
void Account::setRole() {
    cout << "Input role (0-Teacher/1-Student/2-OnJobPostGraduate): ";
    int x;
    cin>>x;
    switch(x) {
        case 0: id._role = TEACHER; break;
        case 1: id._role = STUDENT; break;
        case 2: id._role = ONJOBPOSTGRADUATE; break;
    }
}
void Account::showId() {
    cout << "name: " << id._name << '\n'
        << "sex: " << sex[id._sex] << '\n'
        << "age: " << id._age << '\n'
        << "role: " << role[id._role] << '\n'
        << "number: " << id._number << '\n'
        << "department: " << id._department << endl;
}
void Account::writeToFile() {
    ofstream outFile("res.txt");
    outFile << "name: " << id._name << '\n'
            << "sex: " << sex[id._sex] << '\n'
            << "age: " << id._age << '\n'
            << "role: " << role[id._role] << '\n'
            << "number: " << id._number << '\n'
            << "department: " << id._department << endl;
    outFile.close();
}

/******补充TeacherAccount类的头部******/

/************************/
{
private:
    Position pos; //enum{ASSISTANT, LECTURER, APROFESSOR, PROFESSOR} Position
public:
    TeacherAccount(Id, Position);
    ~TeacherAccount();
    string& getPosition();
    void showPosition();
    /******补充成员函数声明******/

    /****************************/
};
/******定义TeacherAccount类的构造函数******/

/******************************/
TeacherAccount::~TeacherAccount() {}
string& TeacherAccount::getPosition() {
    return position[pos];
}
void TeacherAccount::showPosition() {
    cout << "position: " << position[pos] << endl;
}
void TeacherAccount::showId() {
    Account::showId();
    showPosition();
}

/******补充StudentAccount类的头部******/

/************************/
{
private:
    Major maj; //enum{CS, EE, CE} Major
public:
    StudentAccount(Id, Major);
    ~StudentAccount();
    string& getMajor();
    void showMajor();
    /******补充成员函数声明******/

    /****************************/
};
/******定义StudentAccount类的构造函数******/

/******************************/
StudentAccount::~StudentAccount() {}
string& StudentAccount::getMajor() {
    return major[maj];
}
void StudentAccount::showMajor() {
    cout << "major: " << major[maj] << endl;
}
void StudentAccount::showId() {
    Account::showId();
    showMajor();
}

/******补充OnJobPostgraduateAccount类的头部******/

/************************/
{
public:
    OnJobPostgraduateAccount(Id, Position, Major);
    ~OnJobPostgraduateAccount();
    /******补充成员函数声明******/

    /****************************/
};
/******定义OnJobPostgraduateAccount类的构造函数******/

/******************************/
OnJobPostgraduateAccount::~OnJobPostgraduateAccount() {}
void OnJobPostgraduateAccount::showId() {
    Account::showId();
    showPosition();
    showMajor();
}
void OnJobPostgraduateAccount::writeToFile() {
    Account::writeToFile();
    ofstream outFile("res.txt", ios_base::app);
    outFile << "position: " << getPosition() << endl
            << "major: " << getMajor() << endl;
    outFile.close();
}

int main() {
    Id stud = {"Meng Chao", MALE, 18, STUDENT, 20190131, "Dep. of Computer"};
    Id tch = {"Zheng Xiao-hong", FEMALE, 25, TEACHER, 1000568, "Dep. of Computer"};

    StudentAccount s(stud, CS);
    TeacherAccount t(tch, LECTURER);
    OnJobPostgraduateAccount g(tch, LECTURER, EE);
    g.setRole(); //设置数据成员_role为OnJobPostgraduat

    /******定义基类Account的指针变量pt,并初始化为空指针******/

    /******对pt进行赋值,实现对TeacherAccount类的showId成员函数的调用******/

    /********************/
    cout << endl;
    /******对pt进行赋值,实现对StudentAccount类的showId成员函数的调用******/

    /********************/
    cout << endl;
    /******对pt进行赋值,实现对OnJobPostgraduateAccount类的showId成员函数的调用******/

    /********************/
    pt->writeToFile();

    return 0;
}

图1 屏幕输出内容
图2 输出文件内容
第一次用
这个图片怎么弄啊,我放在我QQ小号的空间里了

                               
登录/注册后可看大图

https://user.qzone.qq.com/2033805081/main
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-15 23:46:40 | 显示全部楼层
aoki.A.Z 发表于 2020-5-15 23:45
/*
**程序说明:考察“继承和派生”、“动态多态性”的原理、机制和实现
(1)类的继承结构:基类Account ...

https://user.qzone.qq.com/2033805081/main
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-15 23:47:11 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-15 23:49:49 | 显示全部楼层
题目

/*
**程序说明:考察“继承和派生”、“动态多态性”的原理、机制和实现
(1)类的继承结构:基类Account是其直接公有派生类TeacherAccount和StudentAccount的虚基类,而OnJobPostgraduateAccount类是Teacher类和Student类的共同直接公有派生类。
(2)在主函数中,使用基类Account的指针分别指向派生类TeacherAccount、StudentAccount和OnJobPostgraduateAccount的对象,并调用“虚函数”实现“动态多态”。
**作业要求:首先阅读并分析已给代码,然后将程序补充完整,最后运行程序得到如图1所示的屏幕输出结果和如图2所示的文件输出结果。
*/
#include <iostream>
#include <fstream>
#include <string>
using namespace std;

typedef enum{TEACHER, STUDENT, ONJOBPOSTGRADUATE} Role;
string role[] = {"Teacher", "Student", "OnJobPostGraduate"};
typedef enum{MALE, FEMALE} Sex;
string sex[] = {"Male", "Female"};
typedef enum{ASSISTANT, LECTURER, APROFESSOR, PROFESSOR} Position;
string position[] = {"Assistatn", "Lecturer", "AProfessor", "Professor"};
typedef enum{CS, EE, CE} Major;
string major[]={"CS", "EE", "CE"};
typedef struct Identity {
    string _name;
    Sex _sex; //enum{MALE, FEMALE} Sex
    int _age;
    Role _role; //enum{TEACHER, STUDENT, ONJOBPOSTGRADUATE} Role
    int _number;
    string _department;
} Id;

class Account {
private:
    Id id;
public:
    Account(Id);
    ~Account();
    void setRole();
    /******补充成员函数声明******/

    /****************************/
};
Account::Account(Id i): id(i) {}
Account::~Account() {}
void Account::setRole() {
    cout << "Input role (0-Teacher/1-Student/2-OnJobPostGraduate): ";
    int x;
    cin>>x;
    switch(x) {
        case 0: id._role = TEACHER; break;
        case 1: id._role = STUDENT; break;
        case 2: id._role = ONJOBPOSTGRADUATE; break;
    }
}
void Account::showId() {
    cout << "name: " << id._name << '\n'
        << "sex: " << sex[id._sex] << '\n'
        << "age: " << id._age << '\n'
        << "role: " << role[id._role] << '\n'
        << "number: " << id._number << '\n'
        << "department: " << id._department << endl;
}
void Account::writeToFile() {
    ofstream outFile("res.txt");
    outFile << "name: " << id._name << '\n'
            << "sex: " << sex[id._sex] << '\n'
            << "age: " << id._age << '\n'
            << "role: " << role[id._role] << '\n'
            << "number: " << id._number << '\n'
            << "department: " << id._department << endl;
    outFile.close();
}

/******补充TeacherAccount类的头部******/

/************************/
{
private:
    Position pos; //enum{ASSISTANT, LECTURER, APROFESSOR, PROFESSOR} Position
public:
    TeacherAccount(Id, Position);
    ~TeacherAccount();
    string& getPosition();
    void showPosition();
    /******补充成员函数声明******/

    /****************************/
};
/******定义TeacherAccount类的构造函数******/

/******************************/
TeacherAccount::~TeacherAccount() {}
string& TeacherAccount::getPosition() {
    return position[pos];
}
void TeacherAccount::showPosition() {
    cout << "position: " << position[pos] << endl;
}
void TeacherAccount::showId() {
    Account::showId();
    showPosition();
}

/******补充StudentAccount类的头部******/

/************************/
{
private:
    Major maj; //enum{CS, EE, CE} Major
public:
    StudentAccount(Id, Major);
    ~StudentAccount();
    string& getMajor();
    void showMajor();
    /******补充成员函数声明******/

    /****************************/
};
/******定义StudentAccount类的构造函数******/

/******************************/
StudentAccount::~StudentAccount() {}
string& StudentAccount::getMajor() {
    return major[maj];
}
void StudentAccount::showMajor() {
    cout << "major: " << major[maj] << endl;
}
void StudentAccount::showId() {
    Account::showId();
    showMajor();
}

/******补充OnJobPostgraduateAccount类的头部******/

/************************/
{
public:
    OnJobPostgraduateAccount(Id, Position, Major);
    ~OnJobPostgraduateAccount();
    /******补充成员函数声明******/

    /****************************/
};
/******定义OnJobPostgraduateAccount类的构造函数******/

/******************************/
OnJobPostgraduateAccount::~OnJobPostgraduateAccount() {}
void OnJobPostgraduateAccount::showId() {
    Account::showId();
    showPosition();
    showMajor();
}
void OnJobPostgraduateAccount::writeToFile() {
    Account::writeToFile();
    ofstream outFile("res.txt", ios_base::app);
    outFile << "position: " << getPosition() << endl
            << "major: " << getMajor() << endl;
    outFile.close();
}

int main() {
    Id stud = {"Meng Chao", MALE, 18, STUDENT, 20190131, "Dep. of Computer"};
    Id tch = {"Zheng Xiao-hong", FEMALE, 25, TEACHER, 1000568, "Dep. of Computer"};

    StudentAccount s(stud, CS);
    TeacherAccount t(tch, LECTURER);
    OnJobPostgraduateAccount g(tch, LECTURER, EE);
    g.setRole(); //设置数据成员_role为OnJobPostgraduat

    /******定义基类Account的指针变量pt,并初始化为空指针******/

    /******对pt进行赋值,实现对TeacherAccount类的showId成员函数的调用******/

    /********************/
    cout << endl;
    /******对pt进行赋值,实现对StudentAccount类的showId成员函数的调用******/

    /********************/
    cout << endl;
    /******对pt进行赋值,实现对OnJobPostgraduateAccount类的showId成员函数的调用******/

    /********************/
    pt->writeToFile();

    return 0;
}

图1 屏幕输出内容

图2 输出文件内容
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-15 23:51:04 | 显示全部楼层
第一次用,图片怎么发啊
图片我发在这个QQ小号的空间里了2张图片
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-15 23:51:35 | 显示全部楼层
这图片怎么发啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-16 00:42:19 | 显示全部楼层
你等级不够,还不能发图片

发代码教程
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-14 02:19

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表