锘??xml version="1.0" encoding="utf-8" standalone="yes"?>欧美亚洲日本久久精品,久久免费视频观看,国产精品久久久久久久久免费http://m.shnenglu.com/ningfangli-blog/articles/15662.htmlningfangliningfangliSat, 25 Nov 2006 12:36:00 GMThttp://m.shnenglu.com/ningfangli-blog/articles/15662.htmlhttp://m.shnenglu.com/ningfangli-blog/comments/15662.htmlhttp://m.shnenglu.com/ningfangli-blog/articles/15662.html#Feedback0http://m.shnenglu.com/ningfangli-blog/comments/commentRss/15662.htmlhttp://m.shnenglu.com/ningfangli-blog/services/trackbacks/15662.html

C++澶氭佹妧鏈?/span>

銆婄▼搴忓憳銆?004/0 2

鎽樿

鏈枃浠嬬粛浜?span lang="EN-US">C++涓殑鍚勭澶氭佹э紝閲嶇偣闃愯堪浜嗛潰鍚戝璞$殑鍔ㄦ佸鎬佸拰鍩轟簬妯℃澘鐨勯潤鎬佸鎬侊紝騫跺垵鎺袱縐嶆妧鏈殑緇撳悎浣跨敤銆?/span>

鍏抽敭璇?/span>

鍑芥暟澶氭?span lang="EN-US">聽瀹忓鎬?鍔ㄦ佸鎬?闈欐佸鎬?/span>

瀵艱█

澶氭侊紙polymorphism錛変竴璇嶆渶鍒濇潵婧愪簬甯岃厞璇?/span> polumorphos錛屽惈涔夋槸鍏鋒湁澶氱褰㈠紡鎴栧艦鎬佺殑鎯呭艦銆傚湪紼嬪簭璁捐棰嗗煙錛屼竴涓箍娉涜鍙殑瀹氫箟鏄?/span> 涓縐嶅皢涓嶅悓鐨勭壒孌婅涓哄拰鍗曚釜娉涘寲璁板彿鐩稿叧鑱旂殑鑳藉姏鈥濄傚拰 綰補鐨勯潰鍚戝璞$▼搴忚璁¤璦涓嶅悓錛?span lang="EN-US">C++涓殑澶氭佹湁鐫鏇村箍娉涚殑鍚箟銆傞櫎浜嗗父瑙佺殑閫氳繃 綾葷戶鎵垮拰铏氬嚱鏁版満鍒剁敓鏁堜簬榪愯鏈熺殑鍔ㄦ佸鎬侊紙 dynamic polymorphism 錛夊錛屾ā鏉夸篃鍏佽灝嗕笉鍚岀殑鐗規畩琛屼負鍜屽崟涓硾鍖栬鍙風浉鍏寵仈錛岀敱浜庤繖縐嶅叧鑱斿鐞嗕簬緙栬瘧鏈熻岄潪榪愯鏈燂紝鍥犳琚О涓洪潤鎬佸鎬侊紙static polymorphism錛夈?/span>

浜嬪疄涓婏紝甯﹀彉閲忕殑瀹忓拰鍑芥暟閲嶈澆鏈哄埗涔熷厑璁稿皢涓嶅悓鐨勭壒孌婅涓哄拰鍗曚釜娉涘寲璁板彿鐩稿叧鑱斻傜劧鑰岋紝涔犳儻涓婃垜浠茍涓嶅皢瀹冧滑灞曠幇鍑烘潵鐨勮涓虹О涓哄鎬侊紙鎴栭潤鎬佸鎬侊級銆備粖澶╋紝褰撴垜浠皥鍙婂鎬佹椂錛屽鏋滄病鏈夋槑紜墍鎸囷紝榛樿灝辨槸鍔ㄦ佸鎬侊紝鑰岄潤鎬佸鎬佸垯鏄寚鍩轟簬妯℃澘鐨勫鎬併備笉榪囷紝鍦ㄨ繖綃囦互C++鍚勭澶氭佹妧鏈負涓婚鐨勬枃绔犱腑錛屾垜浠鍏堣繕鏄洖欏句竴涓婥++紺劇兢浜夎宸蹭箙鐨勫彟涓縐嶁滃鎬佲濓細鍑芥暟澶氭侊紙function polymorphism錛夛紝浠ュ強鏇翠笉甯告彁鐨勫畯澶氭侊紙macro polymorphism錛夈?/span>

鍑芥暟澶氭?/span>

涔熷氨鏄垜浠父璇寸殑鍑芥暟閲嶈澆錛?span lang="EN-US">function overloading錛夈傚熀浜庝笉鍚岀殑鍙傛暟鍒楄〃錛屽悓涓涓嚱鏁板悕瀛楀彲浠ユ寚鍚戜笉鍚岀殑鍑芥暟瀹氫箟錛?/span>

// overload_poly.cpp

#include <iostream>
#include <string>

// 瀹氫箟涓や釜閲嶈澆鍑芥暟

int my_add(int a, int b)
{
聽聽聽 return a + b;
}

int my_add(int a, std::string b)
{
聽聽聽 return a + atoi(b.c_str());
}

int main()
{
聽聽聽 int i = my_add(1, 2);聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 // 涓や釜鏁存暟鐩稿姞
聽聽聽 int s = my_add(1, "2");聽聽聽聽聽聽聽聽聽聽聽聽聽 // 涓涓暣鏁板拰涓涓瓧絎︿覆鐩稿姞
聽聽聽 std::cout << "i = " << i << "\n";
聽聽聽 std::cout << "s = " << s << "\n";
}聽

鏍規嵁鍙傛暟鍒楄〃鐨勪笉鍚岋紙綾誨瀷銆佷釜鏁版垨鍏艱屾湁涔嬶級錛?span lang="EN-US">my_add(1, 2)鍜宮y_add(1, "2")琚垎鍒紪璇戜負瀵筸y_add(int, int)鍜宮y_add(int, std::string)鐨勮皟鐢ㄣ傚疄鐜板師鐞嗗湪浜庣紪璇戝櫒鏍規嵁涓嶅悓鐨勫弬鏁板垪琛ㄥ鍚屽悕鍑芥暟榪涜鍚嶅瓧閲嶆暣錛岃屽悗榪欎簺鍚屽悕鍑芥暟灝卞彉鎴愪簡褰兼涓嶅悓鐨勫嚱鏁般傛瘮鏂硅錛屼篃璁告煇涓紪璇戝櫒浼氬皢my_add()鍑芥暟鍚嶅瓧鍒嗗埆閲嶆暣涓簃y_add_int_int()鍜宮y_add_int_str()銆?/span>

瀹忓鎬?/span>

甯﹀彉閲忕殑瀹忓彲浠ュ疄鐜頒竴縐嶅垵綰у艦寮忕殑闈欐佸鎬侊細

// macro_poly.cpp

#include <iostream>
#include <string>

// 瀹氫箟娉涘寲璁板彿錛氬畯ADD
#define ADD(A, B) (A) + (B);

int main()
{
聽聽聽 int i1(1), i2(2);
聽聽聽 std::string s1("Hello, "), s2("world!");
聽聽聽 int i = ADD(i1, i2);聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 // 涓や釜鏁存暟鐩稿姞
聽聽聽 std::string s = ADD(s1, s2);聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 // 涓や釜瀛楃涓測滅浉鍔犫?/font>
聽聽聽 std::cout << "i = " << i << "\n";
聽聽聽 std::cout << "s = " << s << "\n";
}

褰撶▼搴忚緙栬瘧鏃訛紝琛ㄨ揪寮?span lang="EN-US">ADD(i1, i2)鍜孉DD(s1, s2)鍒嗗埆琚浛鎹負涓や釜鏁存暟鐩稿姞鍜屼袱涓瓧絎︿覆鐩稿姞鐨勫叿浣撹〃杈懼紡銆傛暣鏁扮浉鍔犱綋鐜頒負姹傚拰錛岃屽瓧絎︿覆鐩稿姞鍒欎綋鐜頒負榪炴帴銆傜▼搴忕殑杈撳嚭緇撴灉絎﹀悎鐩磋錛?/span>

1 + 2 = 3
Hello, + world! = Hello, world!

鍔ㄦ佸鎬?/span>

榪欏氨鏄紬鎵鍛ㄧ煡鐨勭殑澶氭併傜幇浠i潰鍚戝璞¤璦瀵硅繖涓蹇電殑瀹氫箟鏄竴鑷寸殑銆傚叾鎶鏈熀紜鍦ㄤ簬 緇ф壙鏈哄埗鍜岃櫄鍑芥暟銆備緥濡傦紝鎴戜滑鍙互瀹氫箟涓涓娊璞″熀綾?span lang="EN-US">Vehicle 鍜屼袱涓淳鐢熶簬Vehicle鐨勫叿浣撶被Car鍜孉irplane錛?/span>

// dynamic_poly.h

#include <iostream>

// 鍏叡鎶借薄鍩虹被Vehicle
class Vehicle
{
public:
聽聽聽 virtual void run() const = 0;
};

// 媧劇敓浜嶸ehicle鐨勫叿浣撶被Car
class Car: public Vehicle
{
public:
聽聽聽 virtual void run() const
聽聽聽 {
聽聽聽聽聽聽聽 std::cout << "run a car\n";
聽聽聽 }
};

// 媧劇敓浜嶸ehicle鐨勫叿浣撶被Airplane
class Airplane: public Vehicle
{
public:
聽聽聽 virtual void run() const
聽聽聽 {
聽聽聽聽聽聽聽 std::cout << "run a airplane\n";
聽聽聽 }
};

瀹㈡埛紼嬪簭鍙互閫氳繃鎸囧悜鍩虹被Vehicle鐨勬寚閽堬紙鎴栧紩鐢級鏉ユ搷綰靛叿浣撳璞°傞氳繃鎸囧悜鍩虹被瀵硅薄鐨勬寚閽堬紙鎴栧紩鐢級鏉ヨ皟鐢ㄤ竴涓櫄鍑芥暟錛屼細瀵艱嚧瀵硅鎸囧悜鐨勫叿浣撳璞′箣鐩稿簲鎴愬憳鐨勮皟鐢細

// dynamic_poly_1.cpp

#include <iostream>
#include <vector>
#include "dynamic_poly.h"

// 閫氳繃鎸囬拡run浠諱綍vehicle
void run_vehicle(const Vehicle* vehicle)
{
聽聽聽 vehicle->run();聽聽聽聽聽聽聽聽聽聽聽 // 鏍規嵁vehicle鐨勫叿浣撶被鍨嬭皟鐢ㄥ搴旂殑run()
}

int main()
{
聽聽聽 Car car;
聽聽聽 Airplane airplane;
聽聽聽 run_vehicle(&car);聽聽聽聽聽聽聽聽 // 璋冪敤Car::run()
聽聽聽 run_vehicle(&airplane);聽聽聽 // 璋冪敤Airplane::run()
}

姝や緥涓紝鍏抽敭鐨勫鎬佹帴鍙e厓绱犱負 铏氬嚱鏁?span lang="EN-US">run()銆傜敱浜?/span> run_vehicle()鐨勫弬鏁頒負鎸囧悜鍩虹被Vehicle鐨勬寚閽?/span> 錛屽洜鑰屾棤娉曞湪緙栬瘧鏈熷喅瀹氫嬌鐢ㄥ摢涓涓増鏈殑run()銆傚湪榪愯鏈燂紝涓轟簡鍒嗘淳鍑芥暟璋冪敤錛岃櫄鍑芥暟琚皟鐢ㄧ殑閭d釜瀵硅薄鐨勫畬鏁村姩鎬佺被鍨嬪皢琚闂傝繖鏍蜂竴鏉ワ紝瀵逛竴涓狢ar瀵硅薄璋冪敤 run_vehicle() 錛?/span> 瀹為檯涓婂皢 璋冪敤Car::run()錛岃屽浜嶢irplane瀵硅薄鑰岃█灝嗚皟鐢ˋirplane::run()銆?/span>

鎴栬鍔ㄦ佸鎬佹渶鍚稿紩浜轟箣澶勫湪浜庡鐞嗗紓璐ㄥ璞¢泦鍚堢殑鑳藉姏錛?/span>

// dynamic_poly_2.cpp

#include <iostream>
#include <vector>
#include "dynamic_poly.h"

// run寮傝川vehicles闆嗗悎
void run_vehicles(const std::vector<Vehicle*>& vehicles)
{
聽聽聽 for (unsigned int i = 0; i < vehicles.size(); ++i)
聽聽聽 {
聽聽聽聽聽聽聽 vehicles[i]->run();聽聽聽聽 // 鏍規嵁鍏蜂綋vehicle鐨勭被鍨嬭皟鐢ㄥ搴旂殑run()
聽聽聽 }
}

int main()
{
聽聽聽 Car car;
聽聽聽 Airplane airplane;
聽聽聽 std::vector<Vehicle*> v;聽聽聽 // 寮傝川vehicles闆嗗悎
聽聽聽 v.push_back(&car);
聽聽聽 v.push_back(&airplane);
聽聽聽 run_vehicles(v);聽聽聽聽聽聽聽聽聽聽聽 // run涓嶅悓綾誨瀷鐨剉ehicles
}

鍦?span lang="EN-US">run_vehicles()涓紝vehicles[i]->run() 渚濇嵁姝h榪唬鐨勫厓绱犵殑綾誨瀷鑰岃皟鐢ㄤ笉鍚岀殑鎴愬憳鍑芥暟銆傝繖浠庝竴涓晶闈綋鐜頒簡闈㈠悜瀵硅薄緙栫▼椋庢牸鐨勪紭闆呫?/span>

闈欐佸鎬?/span>

濡傛灉璇村姩鎬佸鎬佹槸閫氳繃铏氬嚱鏁版潵琛ㄨ揪鍏卞悓鎺ュ彛鐨勮瘽錛岄偅涔堥潤鎬佸鎬佸垯鏄氳繃鈥滃郊姝ゅ崟鐙畾涔変絾鏀寔鍏卞悓鎿嶄綔鐨勫叿浣撶被鈥濇潵琛ㄨ揪鍏卞悓鎬э紝鎹㈠彞璇濊錛屽繀欏誨瓨鍦ㄥ繀闇鐨勫悓鍚嶆垚鍛樺嚱鏁般?/span>

鎴戜滑鍙互閲囩敤闈欐佸鎬佹満鍒墮噸鍐欎笂涓鑺傜殑渚嬪瓙銆傝繖涓嬈★紝鎴戜滑涓嶅啀瀹氫箟vehicles綾誨眰嬈$粨鏋勶紝鐩稿弽錛屾垜浠紪鍐欏郊姝ゆ棤鍏崇殑鍏蜂綋綾籆ar鍜孉irplane錛堝畠浠兘鏈変竴涓猺un()鎴愬憳鍑芥暟錛夛細

// static_poly.h

#include <iostream>

//鍏蜂綋綾籆ar
class Car
{
public:
聽聽聽 void run() const
聽聽聽 {
聽聽聽聽聽聽聽 std::cout << "run a car\n";
聽聽聽 }
};

//鍏蜂綋綾籄irplane
class Airplane
{
public:
聽聽聽 void run() const
聽聽聽 {
聽聽聽聽聽聽聽 std::cout << "run a airplane\n";
聽聽聽 }
};

run_vehicle()搴旂敤紼嬪簭琚敼鍐欏涓嬶細聽

// static_poly_1.cpp

#include <iostream>
#include <vector>
#include "static_poly.h"

// 閫氳繃寮曠敤鑰宺un浠諱綍vehicle
template <typename Vehicle>
void run_vehicle(const Vehicle& vehicle)
{
聽聽聽 vehicle.run();聽聽聽聽聽聽聽聽聽聽聽 // 鏍規嵁vehicle鐨勫叿浣撶被鍨嬭皟鐢ㄥ搴旂殑run()
}

int main()
{
聽聽聽 Car car;
聽聽聽 Airplane airplane;
聽聽聽 run_vehicle(car);聽聽聽聽聽聽聽聽 // 璋冪敤Car::run()
聽聽聽 run_vehicle(airplane);聽聽聽 // 璋冪敤Airplane::run()
}聽

鐜板湪 Vehicle鐢ㄤ綔 妯℃澘鍙傛暟鑰岄潪鍏叡鍩虹被瀵硅薄錛堜簨瀹炰笂錛岃繖閲岀殑 Vehicle鍙槸涓涓鍚堢洿瑙夌殑璁板彿鑰屽凡錛屾澶栧埆鏃犲畠鎰?/span> 錛夈傜粡榪囩紪璇戝櫒澶勭悊鍚庯紝鎴戜滑鏈緇堜細寰楀埌 run_vehicle <Car>() 鍜? run_vehicle <Airplane>()涓や釜涓嶅悓鐨勫嚱鏁?/span> 銆?/span> 榪欏拰鍔ㄦ佸鎬佷笉鍚岋紝鍔ㄦ佸鎬?/span> 鍑熻櫄鍑芥暟鍒嗘淳鏈哄埗 鍦ㄨ繍琛屾湡鍙湁涓涓?/span> run_vehicle ()鍑芥暟銆?/span>

鎴戜滑鏃犳硶鍐嶉忔槑鍦板鐞嗗紓璐ㄥ璞¢泦鍚堜簡錛屽洜涓烘墍鏈夌被鍨嬮兘蹇呴』鍦ㄧ紪璇戞湡浜堜互鍐沖畾銆備笉榪囷紝涓轟笉鍚岀殑vehicles寮曞叆涓嶅悓鐨勯泦鍚堝彧鏄婦鎵嬩箣鍔熾傜敱浜庢棤闇鍐嶅皢闆嗗悎鍏冪礌灞闄愪簬鎸囬拡鎴栧紩鐢紝鎴戜滑鐜板湪鍙互浠庢墽琛屾ц兘鍜岀被鍨嬪畨鍏ㄤ袱鏂歸潰鑾峰緱濂藉錛?/span>

// static_poly_2.cpp

#include <iostream>
#include <vector>
#include "static_poly.h"

// run鍚岃川vehicles闆嗗悎
template <typename Vehicle>
void run_vehicles(const std::vector<Vehicle>& vehicles)
{
聽聽聽 for (unsigned int i = 0; i < vehicles.size(); ++i)聽
聽聽聽 {
聽聽聽聽聽聽聽 vehicles[i].run(); 聽聽聽聽聽聽聽聽聽聽 // 鏍規嵁vehicle鐨勫叿浣撶被鍨嬭皟鐢ㄧ浉搴旂殑run()
聽聽聽 }
}

int main()
{
聽聽聽 Car car1, car2;
聽聽聽 Airplane airplane1, airplane2;

聽聽聽 std::vector<Car> vc;聽聽聽聽聽聽聽聽聽聽聽聽聽 // 鍚岃川cars闆嗗悎
聽聽聽 vc.push_back(car1);
聽聽聽 vc.push_back(car2);
聽聽聽 //vc.push_back(airplane1);聽聽聽聽聽聽聽 // 閿欒錛氱被鍨嬩笉鍖歸厤
聽聽聽 run_vehicles(vc);聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 // run cars

聽聽聽 std::vector<Airplane> vs;聽聽聽聽聽聽聽聽 // 鍚岃川airplanes闆嗗悎
聽聽聽 vs.push_back(airplane1);
聽聽聽 vs.push_back(airplane2);
聽聽聽 //vs.push_back(car1);聽聽聽聽聽聽聽聽聽聽聽聽 // 閿欒錛氱被鍨嬩笉鍖歸厤
聽聽聽 run_vehicles(vs);聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 // run airplanes
}

涓ょ澶氭佹満鍒剁殑緇撳悎浣跨敤

鍦ㄤ竴浜涢珮綰?span lang="EN-US">C++搴旂敤涓紝鎴戜滑鍙兘闇瑕佺粨鍚堜嬌鐢ㄥ姩鎬佸鎬佸拰闈欐佸鎬佷袱縐嶆満鍒訛紝浠ユ湡杈懼埌瀵硅薄鎿嶄綔鐨勪紭闆呫佸畨鍏ㄥ拰楂樻晥銆備緥濡傦紝鎴戜滑鏃㈠笇鏈涗竴鑷磋屼紭闆呭湴澶勭悊vehicles鐨剅un闂錛屽張甯屾湜鈥滃畨鍏ㄨ岄珮鏁堚濆湴瀹屾垚緇欓琛屽櫒錛堥鏈恒侀鑹囩瓑錛夎繘琛屸滅┖涓姞娌光濊繖鏍風殑楂橀毦搴﹀姩浣溿備負姝わ紝鎴戜滑棣栧厛灝嗕笂闈㈢殑vehicles綾誨眰嬈$粨鏋勬敼鍐欏涓嬶細

// dscombine_poly.h

#include <iostream>
#include <vector>

// 鍏叡鎶借薄鍩虹被Vehicle
class Vehicle
{
聽聽聽 public:
聽聽聽 virtual void run() const = 0;
};

// 媧劇敓浜嶸ehicle鐨勫叿浣撶被Car
class Car: public Vehicle
{
public:
聽聽聽 virtual void run() const
聽聽聽 {
聽聽聽聽聽聽聽 std::cout << "run a car\n";
聽聽聽 }
};

// 媧劇敓浜嶸ehicle鐨勫叿浣撶被Airplane
class Airplane: public Vehicle
{
public:
聽聽聽 virtual void run() const
聽聽聽 {
聽聽聽聽聽聽聽 std::cout << "run a airplane\n";
聽聽聽 }

聽聽聽 void add_oil() const
聽聽聽 {
聽聽聽聽聽聽聽 std::cout << "add oil to airplane\n";
聽聽聽 }
};

// 媧劇敓浜嶸ehicle鐨勫叿浣撶被Airship
class Airship: public Vehicle
{
public:
聽聽聽 virtual void run() const
聽聽聽 {
聽聽聽聽聽聽聽 std::cout << "run a airship\n";
聽聽聽 }
聽聽

聽聽聽 void add_oil() const
聽聽聽 {
聽聽聽聽聽聽聽 std::cout << "add oil to airship\n";
聽聽聽 }
};

鎴戜滑鐞嗘兂涓殑搴旂敤紼嬪簭鍙互緙栧啓濡備笅錛?/span>

// dscombine_poly.cpp

#include <iostream>
#include <vector>
#include "dscombine_poly.h"

// run寮傝川vehicles闆嗗悎
void run_vehicles(const std::vector<Vehicle*>& vehicles)
{
聽聽聽 for (unsigned int i = 0; i < vehicles.size(); ++i)
聽聽聽 {
聽聽聽聽聽聽聽 vehicles[i]->run();聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 // 鏍規嵁鍏蜂綋鐨剉ehicle綾誨瀷璋冪敤瀵瑰簲鐨剅un()
聽聽聽 }
}

// 涓烘煇縐嶇壒瀹氱殑aircrafts鍚岃川瀵硅薄闆嗗悎榪涜鈥滅┖涓姞娌光?/font>
template <typename Aircraft>
void add_oil_to_aircrafts_in_the_sky(const std::vector<Aircraft>& aircrafts)
{
聽聽聽 for (unsigned int i = 0; i < aircrafts.size(); ++i)
聽聽聽 {
聽聽聽聽聽聽聽 aircrafts[i].add_oil();
聽聽聽 }
}

int main()
{
聽聽聽 Car car1, car2;
聽聽聽 Airplane airplane1, airplane2;

聽聽聽 Airship airship1, airship2;
聽聽聽 std::vector<Vehicle*> v;聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 // 寮傝川vehicles闆嗗悎
聽聽聽 v.push_back(&car1);
聽聽聽 v.push_back(&airplane1);
聽聽聽 v.push_back(&airship1);
聽聽聽 run_vehicles(v);聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 // run涓嶅悓縐嶇被鐨剉ehicles

聽聽聽 std::vector<Airplane> vp;聽聽聽聽聽聽聽聽聽聽聽聽聽聽 // 鍚岃川airplanes闆嗗悎
聽聽聽 vp.push_back(airplane1);
聽聽聽 vp.push_back(airplane2);
聽聽聽 add_oil_to_aircrafts_in_the_sky(vp); 聽聽 // 涓篴irplanes榪涜鈥滅┖涓姞娌光?/font>

聽聽聽 std::vector<Airship> vs;聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 // 鍚岃川airships闆嗗悎
聽聽聽 vs.push_back(airship1);
聽聽聽 vs.push_back(airship2);
聽聽聽 add_oil_to_aircrafts_in_the_sky(vs);聽聽聽 // 涓篴irships榪涜鈥滅┖涓姞娌光?/font>
}聽

鎴戜滑淇濈暀浜嗙被灞傛緇撴瀯錛岀洰鐨勬槸涓轟簡鑳?/span> 澶熷埄鐢?/span> run_vehicles()涓鑷磋屼紭闆呭湴澶勭悊 寮傝川瀵硅薄闆嗗悎 vehicles鐨剅un闂銆傚悓鏃訛紝鍒╃敤鍑芥暟妯℃澘add_oil_to_aircrafts_in_the_sky<Aircraft>()錛屾垜浠粛鐒跺彲浠ュ鐞嗙壒瀹氱綾葷殑vehicles 鈥?aircrafts錛堝寘鎷琣irplanes鍜宎irships錛夌殑鈥滅┖涓姞娌光濋棶棰樸傚叾涓紝鎴戜滑閬垮紑浣跨敤鎸囬拡錛屼粠鑰屽湪 鎵ц鎬ц兘鍜岀被鍨嬪畨鍏ㄤ袱鏂歸潰杈懼埌浜嗛鏈熺洰鏍囥?/span>

緇撹

闀挎湡浠ユ潵錛?span lang="EN-US">C++紺劇兢瀵逛簬澶氭佺殑鍐呮兜鍜屽寤朵竴鐩翠簤璁轟笉浼戙傚湪comp.object榪欐牱鐨勭綉緇滆鍧涗笂錛屾綾昏瘽棰樹簤璁鴻嚦浠婁粛闅忓鍙銆傛浘緇忔湁浜哄皢鍔ㄦ佸鎬佺О涓篿nclusion polymorphism錛岃屽皢闈欐佸鎬佺О涓簆arametric polymorphism鎴杙arameterized polymorphism銆?/span>

鎴戞敞鎰忓埌2003騫存柉鍧︾澶у鍏紑鐨勪竴浠?/span>銆奀++ and Object-Oriented Programming銆嬫暀妗堜腑鏄庣‘鎻愬埌浜嗗嚱鏁板鎬佹蹇?鈥?鈥淔unction overloading is also referred to as function polymorphism as it involves one function having many forms鈥濄傛枃鍚庣殑鈥滃弬鑰冩枃鐚濆崟鍏冪粰鍑轟簡榪欎釜緗戦〉閾炬帴銆?/span>

鍙兘浣犳槸絎竴嬈$湅鍒板畯澶氭?span lang="EN-US">榪欎釜鏈銆備笉蹇呰寮傦紝涔熻鎴戝氨鏄犲嚭榪欎釜鏈鐨勨滅涓浜衡濄傛樉鐒訛紝甯﹀彉閲忕殑瀹忥紙鎴栫被浼間簬鍑芥暟鐨勫畯鎴栦吉鍑芥暟瀹忥級鐨勬浛鎹㈡満鍒墮櫎浜嗗厤闄ゅ皬鍨嬪嚱鏁扮殑璋冪敤寮閿涔嬪錛屼篃琛ㄧ幇鍑轟簡綾諱技鐨勫鎬佹с傚湪鎴戜滑涓婇潰鐨勪緥瀛愪腑錛屽瓧絎︿覆鐩稿姞鎵琛ㄧ幇鍑烘潵鐨勭鍚堢洿瑙夌殑榪炴帴鎿嶄綔錛屼簨瀹炰笂鏄敱搴曢儴榪愮畻絎﹂噸杞芥満鍒舵敮鎸佺殑銆傚煎緱鎸囧嚭鐨勬槸錛孋++紺劇兢涓湁浜哄皢榪愮畻絎﹂噸杞芥墍琛ㄧ幇鍑烘潵鐨勫鎬佺О涓篴d hoc polymorphism銆?/span>

David Vandevoorde鍜孨icolai M. Josuttis鍦ㄤ粬浠殑钁椾綔銆奀++ Templates: The Complete Guide銆嬩竴涔︿腑緋葷粺鍦伴槓榪頒簡闈欐佸鎬佸拰鍔ㄦ佸鎬佹妧鏈傚洜涓鴻涓衡?/span>鍜屽叾浠栬璦鏈哄埗鍏崇郴涓嶅ぇ鈥濓紝榪欐湰涔︽病鏈夋彁鍙婂畯澶氭侊紙浠ュ強鍑芥暟澶氭侊級銆傦紙闇瑕佽鏄庣殑鏄紝絎旇呮湰浜烘槸榪欐湰涔︾殑綣佷綋涓枃鐗堣瘧鑰呬箣涓錛屾湰鏂囨鏄熀浜庤繖鏈功鐨勭14绔犫淭he Polymorphic Power of Templates鈥濆啓浣滆屾垚錛?/span>

鍔ㄦ佸鎬佸彧闇瑕佷竴涓鎬佸嚱鏁幫紝鐢熸垚鐨勫彲鎵ц浠g爜灝哄杈冨皬錛岄潤鎬佸鎬佸繀欏婚拡瀵逛笉鍚岀殑綾誨瀷浜х敓涓嶅悓鐨勬ā鏉垮疄浣擄紝灝哄浼氬ぇ涓浜涳紝浣嗙敓鎴愮殑浠g爜浼氭洿蹇紝鍥犱負鏃犻渶閫氳繃鎸囬拡榪涜闂存帴鎿嶄綔銆傞潤鎬佸鎬佹瘮鍔ㄦ佸鎬佹洿鍔犵被鍨嬪畨鍏紝鍥犱負鍏ㄩ儴緇戝畾閮借媯鏌ヤ簬緙栬瘧鏈熴傛濡傚墠闈緥瀛愭墍紺猴紝浣犱笉鍙皢涓涓敊璇殑綾誨瀷鐨勫璞℃彃鍏ュ埌浠庝竴涓ā鏉垮疄渚嬪寲鑰屾潵鐨勫鍣ㄤ箣涓傛澶栵紝姝e浣犲凡緇忕湅鍒扮殑閭f牱錛屽姩鎬佸鎬佸彲浠ヤ紭闆呭湴澶勭悊寮傝川瀵硅薄闆嗗悎錛岃岄潤鎬佸鎬佸彲浠ョ敤鏉ュ疄鐜板畨鍏ㄣ侀珮鏁堢殑鍚岃川瀵硅薄闆嗗悎鎿嶄綔銆?/span>

闈欐佸鎬佷負C++甯︽潵浜嗘硾鍨嬬紪紼嬶紙generic programming錛夌殑姒傚康銆傛硾鍨嬬紪紼嬪彲浠ヨ涓烘槸鈥滅粍浠跺姛鑳藉熀浜庢鏋舵暣浣撹岃璁♀濈殑妯℃澘緙栫▼銆係TL灝辨槸娉涘瀷緙栫▼鐨勪竴涓吀鑼冦係TL鏄竴涓鏋訛紝瀹冩彁渚涗簡澶ч噺鐨勭畻娉曘佸鍣ㄥ拰榪唬鍣紝鍏ㄩ儴浠ユā鏉挎妧鏈疄鐜般備粠鐞嗚涓婅錛孲TL鐨勫姛鑳藉綋鐒跺彲浠ヤ嬌鐢ㄥ姩鎬佸鎬佹潵瀹炵幇錛屼笉榪囪繖鏍蜂竴鏉ュ叾鎬ц兘蹇呭皢澶ф墦鎶樻墸銆?/span>

闈欐佸鎬佽繕涓篊++紺劇兢甯︽潵浜嗘硾鍨嬫ā寮忥紙generic patterns錛夌殑姒傚康銆傜悊璁轟笂錛屾瘡涓涓渶瑕侀氳繃铏氬嚱鏁板拰綾葷戶鎵胯屾敮鎸佺殑璁捐妯″紡閮藉彲浠ュ埄鐢ㄥ熀浜庢ā鏉跨殑闈欐佸鎬佹妧鏈紙鐢氳嚦鍙互緇撳悎浣跨敤鍔ㄦ佸鎬佸拰闈欐佸鎬佷袱縐嶆妧鏈級鑰屽疄鐜般傛濡備綘鐪嬪埌鐨勯偅鏍鳳紝Andrei Alexandrescu鐨勫ぉ鎵嶄綔鍝併奙odern C++ Design: Generic Programming and Design Patterns Applied銆嬶紙Addison-Wesley錛夊拰Loki紼嬪簭搴?/span> 宸茬粡璧板湪浜嗘垜浠殑鍓嶉潰銆?/span>

鍙傝冩枃鐚?/span>

1. David Vandevoorde, Nicolai M. Josuttis, C++ Templates: The Complete Guide, Addison Wesley, 2002.

2. Chris Neumann, CS193d (Summer 2003) C++ and Object-Oriented Programming, http://www.stanford.edu/class/cs193d/, 2003.

鑽h
200 3 騫?span lang="EN-US">10鏈?br />鍗椾含甯堣寖澶у
www.royaloo.com



ningfangli 2006-11-25 20:36 鍙戣〃璇勮
]]>
无遮挡粉嫩小泬久久久久久久| 亚洲国产精品无码久久久秋霞2| 久久精品aⅴ无码中文字字幕不卡| 久久久久亚洲精品无码网址 | 国色天香久久久久久久小说| 精品久久久久久国产牛牛app| 午夜不卡888久久| 久久综合欧美成人| 久久精品一区二区三区中文字幕| 国产精品久久久99| 久久久久亚洲AV综合波多野结衣| 欧美午夜A∨大片久久 | 99热精品久久只有精品| 99久久免费只有精品国产| 国产高潮国产高潮久久久| 精品999久久久久久中文字幕| 97精品国产97久久久久久免费| 很黄很污的网站久久mimi色| 久久国产综合精品五月天| 伊人情人综合成人久久网小说| 精产国品久久一二三产区区别| 亚洲精品tv久久久久久久久| 99精品国产在热久久无毒不卡| 国产精品久久久99| 亚洲精品国精品久久99热一| 久久精品国产亚洲麻豆| 久久综合精品国产一区二区三区| 亚洲精品无码成人片久久| 国产成人精品久久| 色播久久人人爽人人爽人人片aV | 久久精品国产精品青草app| 久久精品国产亚洲AV高清热| 无码人妻久久一区二区三区免费 | 2021国产精品久久精品| 色婷婷久久久SWAG精品| 久久国产成人| 亚洲精品午夜国产va久久| 久久婷婷五月综合成人D啪 | 无码国内精品久久人妻麻豆按摩 | 理论片午午伦夜理片久久| 国产欧美一区二区久久|