(補)第12週実験報告(2)


//*(プログラムヘッダコメント開始)*プログラムの著作権とバージョン宣言部分*Copyright(c)2011、煙台大学コンピュータ学部学生*All rights reserved.*ファイル名:*作成者:王琦*完成日:2012年5月7日*バージョン番号:*タスクおよび解法の説明部分:*入力説明:*問題説明:(教材P 394練習問題9)Teacher(教師)クラスとCadre(幹部)クラスをそれぞれ定義し、多重継承方式でこの2つのクラスから新しいクラスTeacher_Cadre(教師兼幹部)を派生させる.要求:(1)2つのベースクラスに名前、年齢、性別、住所、電話などのデータメンバーが含まれる.(2)Teacherクラスにはデータメンバーtitle(職名)も含まれ、Cadreクラスにはデータメンバーpost(役職)も含まれ、Teacher_Cadreクラスにはデータメンバーwages(給与)も含まれている.(3)2つのベースクラスの名前、年齢、性別、住所、電話などのデータメンバーに対して同じ名前を使用し、これらのデータメンバーを参照するときに役割ドメインを指定する.(4)クラス体にメンバー関数を宣言し、クラス外にメンバー関数を定義する.(5)派生クラスTeacher_Cadreのメンバー関数showでTeacherクラスのdisplay関数を呼び出し、名前、年齢、性別、職名、住所、電話を出力し、cout文で役職と給与を出力する.*プログラム出力:*プログラムヘッダのコメント終了
プログラムコード:
#include <iostream>   
#include <string>   
using namespace std;  
class Teacher  
{  
public:  
    Teacher(string nam,int ag,char s,string add,string t,string tit);  
    void display();  
protected:  
    string name;  
    int age;  
    char sex;  
    string addr;  
    string tel;  
    string title;  
};  
  
Teacher::Teacher(string nam,int ag,char s,string add,string t,string tit):name(nam),age(ag),sex(s),addr(add),tel(t),title(tit){}  
  
void Teacher::display()  
{  
    cout<<"name:"<<name<<endl;  
    cout<<"age:"<<age<<endl;  
    cout<<"sex:"<<sex<<endl;  
    cout<<"addr:"<<addr<<endl;  
    cout<<"tel:"<<tel<<endl;  
    cout<<"title:"<<title<<endl;  
}  
class Cadre  
{  
public :  
    Cadre(string nam,int ag,char s,string add,string t,string p);  
    void display();  
protected:  
    string name;  
    int age;  
    char sex;  
    string addr;  
    string tel;  
    string post;  
};  
Cadre::Cadre(string nam,int ag,char s,string add,string t,string p):name(nam),age(ag),sex(s),addr(add),tel(t),post(p){}  
  
void Cadre::display()  
{  
    cout<<"name:"<<name<<endl;  
    cout<<"age:"<<age<<endl;  
    cout<<"sex:"<<sex<<endl;  
    cout<<"addr:"<<addr<<endl;  
    cout<<"tel:"<<tel<<endl;  
    cout<<"post:"<<post<<endl;  
}  
class Person:public Teacher,public Cadre  
{  
public:  
    Person(string nam,int ag,char s,string add,string t,string tit,string p,float w);  
    void show();  
private:  
    float wage;  
};  
Person::Person(string nam,int ag,char s,string add,string t,string tit,string p,float w):Teacher(nam,ag,s,add,t,tit),Cadre(nam,ag,s,add,t,p),wage(w){}  
void Person::show()  
{  
    Teacher::display();  
    cout<<"post:"<<Cadre::post<<endl;  
    cout<<"wage:"<<wage<<endl;  
}  
void main()  
{  
    Person p1("wang-li",23,'m',"Beijing","123456","","teacher",2500);  
    p1.show();  
    system("pause"); 
} 

実行結果:
name:wang-li age:23 sex:m addr:Beijing tel:123456 title:post:teacher wage:2500任意のキーを押して続行してください.