zoukankan      html  css  js  c++  java
  • [C++]MI(多继承)实例-基础版

    #pragma once
    #ifndef WORKRMI_H_
    #define WORKRMI_H_
    #include <string>
    using namespace std;
    class Worker {
    private:
        string fullname;
        long id;
    protected:
        virtual void Data() const;
        virtual void Get();
    public:
        Worker() :fullname("no one"), id(0L) {}
        Worker(const string& s, long n) :fullname(s), id(n) {}
        virtual ~Worker() = 0;
        virtual void Set() = 0;
        virtual void Show() const = 0;
    };
    class Waiter :virtual public Worker {
    private:
        int pannche;
    protected:
        void Data() const;
        void Get();
    public:
        Waiter() :Worker(), pannche(0) {}
        Waiter(const string& s, long n, int p = 0) :Worker(s, n), pannche(p) {}
        Waiter(const Worker& wk, int p = 0) :Worker(wk), pannche(p) {}
        void Set();
        void Show() const;
    };
    class Singer :virtual public Worker {
    protected:
        enum { other, alto, contralto, soprano, bass, baritone, tenor };
        enum { Vtypes = 7 };
        void Data() const;
        void Get();
    private:
        const static char* pv[Vtypes];
        int voice;
    public:
        Singer() :Worker(), voice(other) {}
        Singer(const string&s, long n, int v = other) :Worker(s, n), voice(v) {}
        Singer(const Worker& wk, int v = other) :Worker(wk), voice(v) {}
        void Set();
        void Show() const;
    };
    class SingingWaiter :public Singer, public Waiter {
    protected:
        void Data() const;
        void Get();
    public:
        SingingWaiter() {};
        SingingWaiter(const string& s, long n, int p = 0, int v = other) :Worker(s, n), Waiter(s, n, p), Singer(s, n, v) {}
        SingingWaiter(const Worker& wk, int p = 0, int v = other) :Worker(wk), Waiter(wk, p), Singer(wk, v) {}
        SingingWaiter(const Waiter& wt, int v = other) :Worker(wt), Waiter(wt), Singer(wt, v) {}
        SingingWaiter(const Singer& wt, int p = 0) :Worker(wt), Waiter(wt, p), Singer(wt) {}
        void Set();
        void Show() const;
    };
    #endif // !WORKRMI_H_
    
    #include "pch.h"
    #include "workrmi.h"
    #include <iostream>
    Worker::~Worker() {}
    void Worker::Data() const {
        cout << "Name: " << fullname << endl;
        cout << "Employee ID: " << id << endl;
    }
    void Worker::Get() {
        getline(cin, fullname);
        cout << "Enter worker's ID: ";
        cin >> id;
        while (cin.get() != '
    ')
            continue;
    }
    void Waiter::Set() {
        cout << "Enter waiter's name: ";
        Worker::Get();
        Get();
    }
    void Waiter::Show()    const {
        cout << "Category: waiter
    ";
        Worker::Data();
        Data();
    }
    void Waiter::Data() const {
        cout << "Panache rating: " << pannche << endl;
    }
    void Waiter::Get() {
        cout << "Enter waiter's panache rating: ";
        cin >> pannche;
        while (cin.get() != '
    ')
            continue;
    }
    const char* Singer::pv[Singer::Vtypes] = { "other","alto","contralto","soprano","bass","baritone","tenor" };
    void Singer::Set() {
        cout << "Enter singer's name: ";
        Worker::Get();
        Get();
    }
    void Singer::Show() const {
        cout << "Category: singer
    ";
        Worker::Data();
        Data();
    }
    void Singer::Data() const {
        cout << "Vocal range: " << pv[voice] << endl;
    }
    void Singer::Get() {
        cout << "Enter number for singer's vocal range:
    ";
        int i;
        for (i = 0; i < Vtypes; i++) {
            cout << i << ": " << pv[i] << "  ";
            if (i % 4 == 3)
                cout << endl;
        }
        if (i % 4 != 0)
            cout << '
    ';
        cin >> voice;
        while (cin.get() != '
    ')
            continue;
    }
    void SingingWaiter::Data() const {
        Singer::Data();
        Waiter::Data();
    }
    void SingingWaiter::Get() {
        Waiter::Get();
        Singer::Get();
    }
    void SingingWaiter::Set() {
        cout << "Enter singing waiter's name: ";
        Worker::Get();
        Get();
    }
    void SingingWaiter::Show() const {
        cout << "Category: singing waiter
    ";
        Worker::Data();
        Data();
    }
    
    #include "pch.h"
    #include <iostream>
    #include <string>
    #include <cstring>
    #include <cstdlib>
    #include <ctime>
    #include "workrmi.h"
    const int SIZE = 5;
    int main(void) {
        Worker* lolas[SIZE];
        int ct;
        for (ct = 0; ct < SIZE; ct++) {
            char choice;
            cout << "Enter the employee category:
    " << "w: waiter    s: singer    " << "t: singing waiter    q: quit
    ";
            cin >> choice;
            while (strchr("wstq",choice)==NULL)
            {
                cout << "Please enter a w, s, t, or q:    ";
                cin >> choice;
            }
            if (choice == 'q')
                break;
            switch (choice)
            {
            case 'w': lolas[ct] = new Waiter;
                break;
            case 's': lolas[ct] = new Singer;
                break;
            case 't': lolas[ct] = new SingingWaiter;
                break;
            }
            cin.get();
            lolas[ct]->Set();
        }
        cout << "
    Here is your staff:
    ";
        int i;
        for (i = 0; i < ct; i++) {
            cout << endl;
            lolas[i]->Show();
        }
        for (i = 0; i < ct; i++)
            delete lolas[i];
        cout << "Bye.
    ";
        return 0;
    }
  • 相关阅读:
    Android 通用获取Ip的方法(判断手机是否联网的方法)!!!
    android intent和intent action大全
    手机信息
    Android 获取信号强度
    android 基站定位
    Android 读取SIM卡参数
    Android 获取手机SIM资料详解
    Android手机中获取手机号码和运营商信息
    java中的url 编码与解码
    java.util.Scanner的日常用法
  • 原文地址:https://www.cnblogs.com/lightmonster/p/10439999.html
Copyright © 2011-2022 走看看