6.8 設(shè)計(jì)一個(gè)虛基類base,包含姓名和年齡私有數(shù)據(jù)成員以及相關(guān)的成員函數(shù),由它派生出領(lǐng)導(dǎo)類leader,包含職務(wù)和部門私有數(shù)據(jù)成員以及相關(guān)的成員函數(shù)。再由base派 生出工程師類engineer,包含職稱和專業(yè)私有數(shù)據(jù)成員以及相關(guān)的成員函數(shù)。然后由1eda和engineer類派生出主任工程師類chairman。采用一些數(shù)據(jù)進(jìn)行測(cè)試。
解:
由于chairman類從leader類和engineer類派生,而leader類和engineer類都是從base類派生的,所以為了使base只存一個(gè)副本,必須采用虛擬派生的方法。
本題程序如下:
#include<iostream.h>
#include<string.h>
class base // 基類
{
char* name;// 姓名
int age; // 年齡
public:
base(){}
void setname(char na[])
{
name=new char[strlen(na)+1];
strcpy(name,na);
}
void setage(int a)
{
age=a;
}
char* getname() { return name; }
int getage() { return age; }
};
class leader:virtual public base // 領(lǐng)導(dǎo)類
{
char *job;//職務(wù)
char *dep;//部門
public:
leader() { }
void setjob(char jb[])
{
job=new char[strlen(jb)+1];
strcpy (job, jb);
}
void setdep(char dp[])
{
dep=new char [strlen (dp) +1] ;
strcpy (dep, dp);
}
char *getjob() { return job; }
char *getdep() { return dep; }
};
class engineer:virtual public base // 工程師類
{
char *major; // 專業(yè)
char *prof; // 職稱
public:
engineer () { }
void setmajor(char maj [])
{
major=new char[strlen(maj)+1];
strcpy (major,maj);
}
void setprof(char pf[])
{
prof=new char[strlen(pf)+1];
strcpy (prof, pf);
}
char*getmajor() {return major; }
char*getprof() {return prof; }
} ;
class chairman:public leader,public engineer // 主任工程師類
{ } ;
void main()
{
chairman c;
c.setname("李明");
c.setage(42);
c.setjob("處長(zhǎng)");
c.setdep("設(shè)計(jì)處");
c.setmajor("電站鍋爐設(shè)計(jì)");
c.setprof("高級(jí)工程師");
cout<< "輸出結(jié)果:"<<endl;
cout << " " << c.getname() << ",年齡" << c.getage()<<"歲,擔(dān)任" <<c.getdep() <<c.getjob() <<","<<endl;
cout << " " << c.getprof() << ",從事" << c.getmajor()<< "專業(yè)" << "。 " << endl;
}
本程序的執(zhí)行結(jié)果如下:
輸出結(jié)果:
李明,年齡42歲,擔(dān)任設(shè)計(jì)處處長(zhǎng),
高級(jí)工程師,從事電站鍋爐設(shè)計(jì)專業(yè)。
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |