YTU-OJ-Problem J: B3 指向基類的指標訪問派生類的成員函式

kewlgrl發表於2015-06-24

Problem J: B3 指向基類的指標訪問派生類的成員函式

Time Limit: 1 Sec  Memory Limit: 128 MB
Submit: 241  Solved: 41
[Submit][Status][Web Board]

Description

領導類(Leader)和工程師類(Engineer)都是人類(Person)的派生類。請將下面程式碼中空缺的部分填上,使main函式中能通過指向Person類的指標,呼叫Leader和Engineer類中各自的成員函式show,輸出相關的資訊
//************* begin *****************
#include <iostream>
using namespace std;
class Person
{
public:
    Person(string na, int a):name(na),age(a) {}
    ___(1)_____ show() ___(2)___;
protected:
    string name;  // 姓名
    int age;      // 年齡
};
class Leader: ___(3)_____ Person
{
private:
    string job;     // 職務
    string dep;     // 部門
public:
    Leader(string na, int a, string j, string d): ____(4)______{ }
    void show(){____(5)____}  
};
//************* end *****************
class Engineer: public Person
{
    string major;     // 專業
public:
    Engineer (string na, int a, string m): Person(na, a),major(m){ }
    void show(){cout<<name<<" is an engineer of "<<major<<" major."<<endl;}
};
int main()
{
    Person *p;
    string name, job, dept,major;
    int age;
    cin>>name>>age>>job>>dept;
    p=new Leader(name,age,job,dept);
    p->show();
    cin>>name>>age>>major;
    p=new Engineer(name,age,major);
    p->show();
    return 0;
}

Input

第一行輸入是某領導的資訊,如“Wang 40 Manager Sales”表示40歲的王(Wang)領導是銷售部(Sales)的經理(Manager)。
第二行輸入某工程師的資訊,如“Zhang 30 Software”表示30歲的張(Zhang)是工程師,他的專業是軟體(Software)

Output

規定的格式輸出資訊,請注意空格及最後的標點。

Sample Input

Wang 40 Manager Sales
Zhang 30 Software

Sample Output

Wang is Manager in Sales department.
Zhang is an engineer of Software major.

HINT


#include <iostream> 
using namespace std; 
class Person 
{ 
public: 
    Person(string na, int a):name(na),age(a) {} 
    virtual void show(); 
  
protected: 
    string name;  // 姓名 
    int age;      // 年齡 
}; 
class Leader: public Person 
{ 
private: 
    string job;     // 職務 
    string dep;     // 部門 
public: 
    Leader(string na, int a, string j, string d): Person(na,a),job(j),dep(d) { } 
    void show(); 
}; 
void Person::show() 
{ 
    cout<<name; 
} 
void Leader::show() 
{ 
    Person::show(); 
    cout<<" is "<<job<<" in "<<dep<<" department."<<endl; 
} 
class Engineer: public Person 
{ 
    string major1;    // 專業 
public: 
    Engineer (string na, int a, string m): Person(na, a),major1(m) { } 
    void show(){cout<<name<<" is an engineer of "<<major1<<" major."<<endl;} 
}; 
int main() 
{ 
    Person *p; 
    string name, job, dept,major; 
    int age; 
    cin>>name>>age>>job>>dept; 
    p=new Leader(name,age,job,dept); 
    p->show(); 
    cin>>name>>age>>major; 
    p=new Engineer(name,age,major); 
    p->show(); 
    return 0; 
} 

指向基類的指標訪問派生類的成員函式,要注意基類寫成
 virtual void show(); 
不然就無法輸出子類中想要輸出的部分,只呼叫基類。

相關文章