struct Employee


{
string first_name,family_name;
char middle_initial;
Date hiring_date;
short department;
//
};涓嬩竴姝ユ垜浠彲鑳介渶瑕佸幓瀹氫箟緇忕悊錛?
struct Manager


{
Employee emp;
list<Employee*> group; //鎵綆$悊鐨勪漢鍛?/span>
short level;
//
}; 涓涓粡鐞嗗悓鏃朵篃鏄竴涓泧鍛橈紝鎵浠ュ湪Manager瀵硅薄鐨別mp鎴愬憳瀛樺偍鐫Employee鏁版嵁銆傚緢鏄庢樉榪欐牱鐨勮璁℃槸緋熺硶鐨勶紝澶у閮戒細鎯沖埌媧劇敓錛?br />
struct Manager:public Employee


{
list<Employee*> group;
short level;
}; 榪欎釜Manager鏄敱Employee媧劇敓鐨勶紝鍙嶈繃鏉ュ氨鏄錛孍mployee鏄疢anager鐨勪竴涓熀綾匯傜被Manager鍖呭惈綾籈mployee寰楁墍鏈夋垚鍛橈紝鍐嶅姞涓婂畠鑷繁鐨勪竴浜涙垚鍛樸?br /> 鎸夌収榪欑鏂瑰紡浠嶦mployee媧劇敓鍑篗anager錛屽氨浣縈anager鎴愪負Employee鐨勪竴涓瓙綾誨瀷錛屼嬌Manager鍙互鐢ㄥ湪鑳藉鎺ュ彈Employee鐨勪換浣曞湴鏂廣傚洜涓篗anager鏄疎mployee錛屾墍浠anager*灝卞彲浠ュ綋鍋欵mployee*浣跨敤銆傜劧鑰岋紝鍥犱負Employee涓嶄竴瀹氭槸Manager錛屾墍浠mployee*灝變笉鑳藉綋鍋歁anager*鐢ㄣ傛昏岃█涔嬬被Derived鏈変竴涓叕鐢ㄥ熀綾籅ase錛岄偅涔堝氨鍙互鐢―erived*緇橞ase*綾誨瀷鐨勫彉閲忚祴鍊鹼紝涓嶉渶瑕佹樉紺虹殑綾誨瀷杞崲銆傝岀浉鍙嶇殑鏂瑰悜錛屼粠Base*鍒癉erived*鍒欏繀欏繪樉紺鴻漿鎹€備緥濡傦細
void g(Manager mm,Employee ee)


{
Employee* pe = &mm; //鍙互錛歁anager閮芥槸Employee
Manager* pm = ⅇ //閿欒錛欵mployee涓嶄竴瀹氭槸Manager
pm->level = 2; //鐏鵑毦錛歟e娌℃湁level
pm = static_cast<Manager*>(pe);//铔姏錛氳繖涓彲浠ワ紝鍥犱負pe鎸囧悜鐨勬槸Manager mm
pm->level = 2; //娌¢棶棰?/span>
}
媧劇敓綾葷殑鎴愬憳鍙互浣跨敤鍏跺熀綾葷殑鍏敤鐨勫拰淇濇姢鐨勬垚鍛橈紝浣嗘槸錛屾淳鐢熺被涓嶈兘浣跨敤鍩虹被鐨勭鏈夋垚鍛樸傚浜庢淳鐢熺被鐨勬垚騫村叕鍥岃█錛屼繚鎶ゆ垚鍛樺氨鍍忔槸鍏敤鎴愬憳錛涗絾瀵逛簬鍏朵粬鍑芥暟瀹冧滑鍒欏儚鏄鐢ㄦ垚鍛樸?br /> 涓嬮潰璇磋媧劇敓綾葷殑鏋勯犲嚱鏁板拰鏋愭瀯鍑芥暟
鏈変簺媧劇敓綾婚渶瑕佹瀯閫犲嚱鏁般傚鏋滄煇涓熀綾諱腑鏈夋瀯閫犲嚱鏁幫紝閭d箞灝卞繀欏昏皟鐢ㄨ繖浜涙瀯閫犲嚱鏁頒腑鐨勬煇涓涓傞粯璁ゆ瀯閫犲嚱鏁板彲浠ヨ闅愬惈鐨勮皟鐢紝浣嗘槸錛屽鏋滀竴涓熀綾葷殑鎵鏈夋瀯閫犲嚱鏁伴兘鏈夊弬鏁幫紝閭d箞灝卞繀欏繪樉紺虹殑璋冪敤鍏朵腑鐨勬煇涓涓傚熀綾繪瀯閫犲嚱鏁扮殑鍙傛暟搴斿湪媧劇敓綾繪瀯閫犲嚱鏁扮殑瀹氫箟涓湁鏄庣‘鎻忚堪銆傚湪榪欐柟闈紝鍩虹被鐨勮涓烘伆鎭板氨鍍忔槸媧劇敓綾葷殑涓涓垚鍛樸備緥濡傦細
Employee::Employee(const string& n,int d):family(n),department(d)


{
//
}


Manager::Manager(const string& n,int d,int lvl):Employee(n,d),/**//*鍒濆鍖栧熀綾?/span>*/level(lvl)/**//*鍒濆鍖栨垚鍛?/span>*/


{
//
} 媧劇敓綾葷殑鏋勯犲嚱鏁板彧鑳芥弿榪板畠鑷繁鐨勬垚鍛樺拰鑷繁鐨勭洿鎺ュ熀綾葷殑鍒濆寮忥紝瀹冧笉鑳界洿鎺ュ幓鍒濆鍖栧熀綾葷殑鎴愬憳錛屼緥濡傦細
Manager::Manager(const string& n,int d,int lvl):family_name(n).department(d),level(lvl)//閿欒錛氬湪Manager閲屾病鏈塮amily_name鍜宒epartment鐨勫0鏄?/span>


{
//
} 綾誨璞$殑鏋勯犳槸鑷笅鑰屼笂榪涜鐨勶細棣栧厛鏄熀綾伙紝鑰屽悗鏄垚鍛橈紝鍐嶅悗鎵嶆槸媧劇敓綾繪湰韜傜被瀵硅薄鐨勯攢姣佸垯姝eソ浠ョ浉鍙嶇殑欏哄簭榪涜錛氶鍏堟槸媧劇敓綾繪湰韜紝鑰屽悗鏄垚鍛橈紝鍐嶅悗鎵嶆槸鍩虹被銆?br /> 瀵逛簬緇欏畾鐨勪竴涓被鍨嬩負Base*鐨勬寚閽堬紝琚寚鐨勫璞″埌搴曞睘浜庡摢涓淳鐢熺被鍨嬪憿錛熻繖涓棶棰樻湁鍥涚鍩烘湰鐨勮В鍐蟲柟妗堬細
- 淇濊瘉琚寚鐨勫彧鑳芥槸鍞竴綾誨瀷鐨勫璞?br />
- 鍦ㄥ熀綾婚噷瀹夋帓涓涓被鍨嬪煙錛屼緵鍑芥暟媯鏌?br />
- 浣跨敤dynamic_cast
- 浣跨敤铏氬嚱鏁?nbsp;
浠嶦mployee鐨勫嚱鏁頒腑鍙栧緱“姝g‘鐨?#8221;琛屼負i錛岃屽張涓嶄緷璧栦簬瀹為檯浣跨敤鐨勫埌搴曟槸鍝竴縐岴mployee錛岃繖灝辨槸鎵璋撶殑澶氭佹с備竴涓甫鏈夎櫄鍑芥暟鐨勭被鍨嬭縐頒負鏄竴涓鎬佺被鍨嬨傝鍦–++閲屽彇寰楀鎬佽涓猴紝琚皟鐢ㄧ殑鍑芥暟灝卞繀欏繪槸铏氬嚱鏁幫紝鑰屽璞″垯蹇呴』鏄氳繃鎸囬拡鎴栬呭紩鐢ㄥ幓鎿嶄綔鐨勩傚鏋滅洿鎺ユ搷浣滀竴涓璞★紙鑰屼笉鏄氳繃鎸囬拡鎴栧紩鐢級錛屽畠鐨勭‘鍒囩被鍨嬪氨宸茬粡涓虹紪璇戝櫒鎵鐭ワ紝鍥犳涔熷氨涓嶉渶瑕佽繍琛屾椂鐨勫鎬佹т簡銆?br /> 閭d箞涓涓櫄鍑芥暟澹版槑涓虹函铏氬嚱鏁幫紝鍒欒繖涓櫄鍑芥暟鎵鍦ㄧ殑綾諱負鎶借薄綾匯傜敤=0浣滀負鍒濆寮忓氨浣胯櫄鍑芥暟鎴愪負“綰櫄鐨?#8221;銆傛敞鎰忥細涓嶈兘鍒涘緩鎶借薄綾葷殑瀵硅薄銆傛娊璞$被鍙兘鍋氱晫闈紝浣滀負鍏朵粬綾葷殑鍩虹被銆傝繕鏈変竴鐐逛篃瑕佹寚鐨勬敞鎰忥紝涓涓湭鍦ㄦ淳鐢熺被閲屽畾涔夌殑綰櫄鍑芥暟浠嶆棫榪樻槸涓涓函铏氬嚱鏁幫紝榪欑鎯呭喌涔熷皢浣胯媧劇敓綾諱粛涓轟竴涓娊璞$被銆備緥濡傦細
class Shape


{
public:
virtual void draw()=0;
virtual bool isClose()=0;
//
};

class Circel:public Shape


{
public:

bool isClose()
{return true;}//瑕嗙洊Shap::isClose
//draw灝氭湭瑕嗙洊
};
Circel a;//閿欒錛氬0鏄庣殑鏄娊璞$被Circel瀵硅薄
鎶借薄綾葷殑鏈閲嶈鐢ㄩ斿氨浣挎彁渚涗竴涓晫闈紝鑰屽張涓嶆槸鏆撮湶浠諱綍瀹炵幇鐨勭粏鑺傘?br />
蹇犲憡 錛?/p>
- 閬垮厤綾誨瀷鍩?/li>
- 鐢ㄦ娊璞$被灝嗚璁$殑涓績闆嗕腑鍒版彁渚涙竻鏅扮殑鐣岄潰鏂歸潰
- 鐢ㄦ娊璞$被浣跨晫闈㈡渶灝忓寲
- 涓涓湁铏氬嚱鏁扮殑綾誨簲璇ユ湁涓涓櫄鏋愭瀯鍑芥暟
- 鎶借薄綾婚氬父涓嶉渶瑕佹瀯閫犲嚱鏁?/li>

]]>