Problem1564--继承和容器

1564: 继承和容器

[Creator : ]
Time Limit : 1.000 sec  Memory Limit : 128 MB

Description

/* 请定义一个结构体TPassenger,定义一个类CVehicle,并从该类以public方式派生出类CBus。具体要求如下:
* 1)结构体TPassenger有两个属性,一个保存姓名(std::string类型),一个保存年龄(int)
* 2)类CVehicle只有一个protected型属性,该属性是一个列表,列表中每个元素都是TPassenger类型,请用std::vector实现该列表
* 3)类CVehicle没有默认构造函数,只有一个带参数的构造函数,该构造函数只有一个参数(std::vector<TPassenger>类型),
*       该构造函数的作用是将参数中的列表内容复制给类CVehicle的私有属性(即2)中提到的列表)。
* 4)类CVehicle只有一个公有的成员函数,void show_passenger_info(),作用是将私有属性的内容输出,输出格式如下:
*       列表元素1的姓名属性,列表元素1的年龄属性,列表元素2的姓名属性,列表元素2的年龄属性,......
*       即将列表中每个元素的姓名和年龄信息逐个输出显示,用英文逗号分隔,前后都没有空格,结尾输出一个回车。
* 5)类CBus在类CVehicle基础上新增了一个私有属性,该属性保存车次信息(std::string类型)
* 6)类CBus没有默认构造函数,只有一个带参数的构造函数,该构造函数有2个参数,
*       第一个是std::vector<TPassenger>类型(其作用同3)中的描述),第二个是std::string类型,代表车次信息
#       注意:要在该派生类的构造函数中调用基类的构造函数。
* 7)类CBus新增了一个公有的函数,void sort_passenger(bool bAscend),作用是将父类的列表按元素的年龄值排序,
*       其中参数bAscend若为真,则结果为升序,否则为降序。
* 8)类CBus重载函数show_passenger_info,作用跟父类的同名函数基本相同,区别是在输出字符串最前面加上
*       车次信息,并用英文的冒号与后面的内容分隔。
*/


// 请把下面的所有代码复制到你的开发环境中,按照上面的要求填充所需要的代码,然后提交该代码进行测试。(注意:main函数中的内容是不能修改的,违者0分)


#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;
/*
* 请在main函数之前,填写你的代码
*/


/// 下面的main函数代码你不需要阅读,也【不能修改;一旦改动,本题0分】。
int main()
{
    int mode = -1;
    int num = -1;
    vector<TPassenger> plist;

    string name;
    int age;

    do
    {
        cin >> mode;

        if (mode != 1 && mode != 2)break;

        cin >> num;

        plist.clear();
        for (int i = 0; i < num; i++)
        {
            cin >> name >> age;
            TPassenger p = { name, age };
            plist.push_back(p);
        }

        if (mode == 1)
        {
            CVehicle v(plist);
            v.show_passenger_info();
        }
        else
        {
            string bus_num;
            cin >> bus_num;
            CBus b(plist, bus_num);
            b.sort_passenger(true);
            b.show_passenger_info();
        }

    } while (true);    
    return 0;
}

Input

输入数据的格式你不需要仔细研读,因为main函数中的内容不需要你写,也不能改。
输入数据可以包含多个测试用例。如果开头是1就是创建CVehicle类,如果开头是2就是创建CBus类,如果是其他值就退出程序。这个开头的数字后面就是多个TPassenger实例的内容,先是一个数字代表实例数,然后就是每个实例的信息,都是名字在前,年龄在后。如果是对应CBus类,则实例内容末尾还要加上车次信息。

Output

输出数据的格式你也不需要仔细研读,因为main函数中的内容不需要你写,也不能改。
输出数据就是显示每个测试用例中CVehicle或CBus类型对象的show_passenger_info函数的输出内容。如果是CBus类型对象,则在输出前先调用该对象的排序函数。

Sample Input Copy

1
2
lei 43 cai 23
2
2
lei 43 cai 23
ok
0

Sample Output Copy

lei,43,cai,23
ok:cai,23,lei,43

HINT

请把题干中的所有代码复制到你的开发环境中,按照上面的要求填充所需要的代码,然后提交该代码进行测试。注意:main函数中的内容是不能修改的,违者0分

Source/Category