青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

EverSpring working shop

To pursue creative ideas based on nature.

統計

留言簿(1)

他山之石

閱讀排行榜

評論排行榜

Some notes about dynamic polymorphism (by virtual) and static polymorphism (by template)

The time and space cost by the late binding (dynamic polymorphism), which is mainly implemented by Virtual Functions, is more than the static polymorphism, mainly implemented by the Template usage. This is because the compiler needs to allocate speical VPTR and VTABLE for each class with virtual function denoted. And duirng the compiling time, the original code is expanded by adding the code locating the virtual functiona address in the VTABLE, at each place the base class pointer/reference are passed?as parameter in?other function call. Finally, at the running time, such extra?code absolutely costs extra time, especially when the base class pointer/referece are passed as parms very frequently.? We can consider to use the template in such sitations like:
    • The context is using the Set of the objects instead of the pointer/reference, and the objects of this set have common behavior at a level of abstraction. The typical application is the Containers design in the STL.
    • The algorithem or behavior of different objects has some common attribute and this common attributes can be determined at compiling time.
    • Policy based programming, and such policy selection can be determined by the client at the compiling time. Refer to MCppD.
    • Very senstive to the requirements on efficiency of time or space.
Must be noted: The bahavior must be determined at the compiling time if using the Template Polymorphism. This means the the client must have the type information explicitly during the code construction time. From this point, we may say the in Template Polymorphism, the CLIENT is the usually in design scope of application because it?is?responsible for the Template Specialization. As to the Dynamic, the?CLIENT?is more in the design scope for the framework, not care of the concrete type information in operation.
Here give an example explaining the usage of the dynamic/static polymorphism:
?
#include <iostream>
using namespace std;
?

/*
?* =====================================================================================
?*??????? Class:? base_d
?*? Description:?
?* =====================================================================================
?*/
class base_d
{
?
? public:
?
??? /* ====================? LIFECYCLE?? ========================================= */
?
??? base_d ();? /* constructor */
?
??? /* Use compiler-generated copy constructor, assignment operator and destructor */
?
??? /* ====================? OPERATORS?? ========================================= */
?
??? /* ====================? OPERATIONS? ========================================= */
??? virtual void dosomething() = 0;
??? /* ====================? ACCESS????? ========================================= */
?
??? /* ====================? INQUIRY???? ========================================= */
?
? protected:
?
? private:
?
}; /* -----? end of class? base_d? ----- */
?
/*
?*--------------------------------------------------------------------------------------
?*?????? Class:? base_d
?*????? Method:? base_d
?* Description:? constructor
?*--------------------------------------------------------------------------------------
?*/
base_d::base_d ()
{
}? /* -----? end of method base_d::base_d? (constructor)? ----- */
?

/*
?* =====================================================================================
?*??????? Class:? client_d
?*? Description:?
?* =====================================================================================
?*/
class client_d
{
?
? public:
?
??? /* ====================? LIFECYCLE?? ========================================= */
?
??? client_d (base_d*);? /* constructor */
?
??? /* Use compiler-generated copy constructor, assignment operator and destructor */
?
??? /* ====================? OPERATORS?? ========================================= */
?
??? /* ====================? OPERATIONS? ========================================= */
?
??? /* ====================? ACCESS????? ========================================= */
??? void get_do();
??? /* ====================? INQUIRY???? ========================================= */
?
? protected:
?
? private:
??? base_d* ptr_b;
?
}; /* -----? end of class? client_d? ----- */
?
/*
?*--------------------------------------------------------------------------------------
?*?????? Class:? client_d
?*????? Method:? client_d
?* Description:? constructor
?*--------------------------------------------------------------------------------------
?*/
client_d::client_d (base_d* pb):ptr_b(pb)
{
}? /* -----? end of method client_d::client_d? (constructor)? ----- */
?

void
client_d::get_do (? )
{
?ptr_b->dosomething();
}??/* -----? end of method client_d::get_do? ----- */
?

/*
?* =====================================================================================
?*??????? Class:? der1_d
?*? Description:?
?* =====================================================================================
?*/
class der1_d : public base_d
{
?
? public:
?
??? /* ====================? LIFECYCLE?? ========================================= */
?
??? der1_d ();? /* constructor */
?
??? /* Use compiler-generated copy constructor, assignment operator and destructor */
?
??? /* ====================? OPERATORS?? ========================================= */
?
??? /* ====================? OPERATIONS? ========================================= */
??? virtual void dosomething();
??? /* ====================? ACCESS????? ========================================= */
?
??? /* ====================? INQUIRY???? ========================================= */
?
? protected:
?
? private:
?
}; /* -----? end of class? der1_d? ----- */
?
/*
?*--------------------------------------------------------------------------------------
?*?????? Class:? der1_d
?*????? Method:? der1_d
?* Description:? constructor
?*--------------------------------------------------------------------------------------
?*/
der1_d::der1_d ()
{
}? /* -----? end of method der1_d::der1_d? (constructor)? ----- */
?

void
der1_d::dosomething (? )
{
??? cout <<"\n this is der1_d is doing something!\n";
}??/* -----? end of method der1_d::dosoming? ----- */
?

/*
?* =====================================================================================
?*??????? Class:? der2_d
?*? Description:?
?* =====================================================================================
?*/
class der2_d : public base_d
{
?
? public:
?
??? /* ====================? LIFECYCLE?? ========================================= */
?
??? der2_d ();? /* constructor */
?
??? /* Use compiler-generated copy constructor, assignment operator and destructor */
?
??? /* ====================? OPERATORS?? ========================================= */
?
??? /* ====================? OPERATIONS? ========================================= */
??? virtual void dosomething();
??? /* ====================? ACCESS????? ========================================= */
?
??? /* ====================? INQUIRY???? ========================================= */
?
? protected:
?
? private:
?
}; /* -----? end of class? der2_d? ----- */
?
/*
?*--------------------------------------------------------------------------------------
?*?????? Class:? der2_d
?*????? Method:? der2_d
?* Description:? constructor
?*--------------------------------------------------------------------------------------
?*/
der2_d::der2_d ()
{
}? /* -----? end of method der2_d::der2_d? (constructor)? ----- */
?

void
der2_d::dosomething (? )
{
??? cout <<"\n this is der2_d is doing something!\n";
}??/* -----? end of method der2_d::dosomething? ----- */
?

/*
?* =====================================================================================
?*??????? Class:? client_s
?*? Description:?
?* =====================================================================================
?*/
template < class T >
class client_s
{
?
? public:
?
??? /* ====================? LIFECYCLE?? ========================================= */
?
??? client_s (T* );?? /* constructor */
?
??? /* Use compiler-generated copy constructor, assignment operator and destructor */
?
??? /* ====================? OPERATORS?? ========================================= */
?
??? /* ====================? OPERATIONS? ========================================= */
??? void get_do();
??? /* ====================? ACCESS????? ========================================= */
?
??? /* ====================? INQUIRY???? ========================================= */
?
? protected:
?
? private:
??? T* ptr_t;
}; /* ----------? end of template class? client_s? ---------- */
?
/*
?*--------------------------------------------------------------------------------------
?*?????? Class:? client_s
?*????? Method:? client_s
?* Description:?
?*--------------------------------------------------------------------------------------
?*/
template < class T >
client_s < T >::client_s (T* pt):ptr_t(pt)
{
}? /* ----------? end of constructor of template class client_s? ---------- */
?
template < class T>
void
client_s<T>::get_do (? )
{
?ptr_t->dosomething();
}??/* -----? end of method client_s::get_do? ----- */
?

/*
?* =====================================================================================
?*??????? Class:? der1_s
?*? Description:?
?* =====================================================================================
?*/
class der1_s
{
?
? public:
?
??? /* ====================? LIFECYCLE?? ========================================= */
?
??? der1_s ();? /* constructor */
?
??? /* Use compiler-generated copy constructor, assignment operator and destructor */
?
??? /* ====================? OPERATORS?? ========================================= */
?
??? /* ====================? OPERATIONS? ========================================= */
??? void dosomething();
??? /* ====================? ACCESS????? ========================================= */
?
??? /* ====================? INQUIRY???? ========================================= */
?
? protected:
?
? private:
?
}; /* -----? end of class? der1_s? ----- */
?
/*
?*--------------------------------------------------------------------------------------
?*?????? Class:? der1_s
?*????? Method:? der1_s
?* Description:? constructor
?*--------------------------------------------------------------------------------------
?*/
der1_s::der1_s ()
{
}? /* -----? end of method der1_s::der1_s? (constructor)? ----- */
?

void
der1_s::dosomething (? )
{
??? cout <<"\n this is der1_s doing something!\n" ;
}??/* -----? end of method der1_s::dosomething? ----- */
?

/*
?* =====================================================================================
?*??????? Class:? der2_s
?*? Description:?
?* =====================================================================================
?*/
class der2_s
{
?
? public:
?
??? /* ====================? LIFECYCLE?? ========================================= */
?
??? der2_s ();? /* constructor */
?
??? /* Use compiler-generated copy constructor, assignment operator and destructor */
?
??? /* ====================? OPERATORS?? ========================================= */
?
??? /* ====================? OPERATIONS? ========================================= */
??? void dosomething();
??? /* ====================? ACCESS????? ========================================= */
?
??? /* ====================? INQUIRY???? ========================================= */
?
? protected:
?
? private:
?
}; /* -----? end of class? der2_s? ----- */
?
/*
?*--------------------------------------------------------------------------------------
?*?????? Class:? der2_s
?*????? Method:? der2_s
?* Description:? constructor
?*--------------------------------------------------------------------------------------
?*/
der2_s::der2_s ()
{
}? /* -----? end of method der2_s::der2_s? (constructor)? ----- */
?

void
der2_s::dosomething (? )
{
?cout<<"\n this is der2_s doing something!\n" ;
}??/* -----? end of method der2_s::dosomething? ----- */
?

int main()
{
?? // Dynamic Polymorphism example:
?? base_d * ptr_1 = new der1_d;
?? base_d * ptr_2 = new der2_d;
?
?? client_d * ptr_c_1 = new client_d(ptr_1);
?? client_d * ptr_c_2 = new client_d(ptr_2);
?
?? ptr_c_1 -> get_do();
?? ptr_c_2 -> get_do();
?
?? // Static Polymorphism example:
?? der1_s * ptr_3 = new der1_s;
?? der2_s * ptr_4 = new der2_s;
??
?? client_s<der1_s> obj_client_1(ptr_3);
?? client_s<der2_s> obj_client_2(ptr_4);
?
?? obj_client_1.get_do();
?? obj_client_2.get_do();
?
?? return 0;
}
testing out:
[alexzh@alexzhang_lnx d_s_poly]$ ./a.out
?
?this is der1_d is doing something!
?
?this is der2_d is doing something!
?
?this is der1_s doing something!
?
?this is der2_s doing something!

posted on 2009-03-08 17:25 everspring79 閱讀(388) 評論(0)  編輯 收藏 引用 所屬分類: Notes

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲成人自拍视频| 亚洲天堂久久| 久久精品免费电影| 欧美大色视频| 麻豆av一区二区三区久久| 在线观看视频亚洲| 美女在线一区二区| 女仆av观看一区| 亚洲国产小视频| 亚洲电影下载| 欧美日韩在线观看一区二区三区| 亚洲精品视频免费观看| 日韩视频一区| 国产精品入口麻豆原神| 久久成人免费网| 老司机一区二区三区| 日韩亚洲欧美一区| 亚洲视频一二| 黄色精品一区| 亚洲精品视频啊美女在线直播| 欧美精品二区| 久久久精品2019中文字幕神马| 久久免费视频观看| 在线视频欧美一区| 欧美一区永久视频免费观看| 亚洲人成在线播放| 一区二区三区久久精品| 国产日韩在线看片| 欧美二区在线观看| 国产精品欧美在线| 欧美国产在线电影| 国产精品久久久久久妇女6080 | 亚洲一区二区三区国产| 翔田千里一区二区| 一本到高清视频免费精品| 午夜亚洲精品| 9l国产精品久久久久麻豆| 一本色道精品久久一区二区三区| 国产精品进线69影院| 免费欧美日韩国产三级电影| 国产精品超碰97尤物18| 欧美插天视频在线播放| 国产精品久久九九| 亚洲国产精品久久| 国产一区美女| 中日韩视频在线观看| 亚洲国产精品第一区二区| 亚洲午夜在线| aa级大片欧美三级| 久久黄色影院| 亚洲欧美日韩在线不卡| 欧美劲爆第一页| 免费人成精品欧美精品| 国产自产在线视频一区| 亚洲一区二区三区精品在线 | 欧美理论电影在线播放| 美女精品在线| 国产日韩欧美精品| 亚洲综合色网站| 亚洲在线免费观看| 欧美日本在线视频| 亚洲二区在线| 亚洲福利视频网| 久久久91精品国产一区二区三区| 午夜精品视频| 国产精品久久久久久久一区探花| 99精品国产在热久久婷婷| 亚洲精品国产系列| 欧美a级在线| 欧美激情亚洲精品| 亚洲国内自拍| 欧美激情精品久久久久久大尺度 | 亚洲人成人一区二区三区| 久久精视频免费在线久久完整在线看| 欧美亚洲一区二区三区| 国产视频精品xxxx| 午夜欧美精品| 老司机久久99久久精品播放免费 | 日韩一二三在线视频播| 欧美成人免费小视频| 亚洲国产成人精品视频| 亚洲片在线观看| 欧美理论电影在线播放| 一本大道av伊人久久综合| 亚洲一区国产精品| 国产精品一区二区你懂得| 性欧美大战久久久久久久免费观看| 欧美在线三级| 伊大人香蕉综合8在线视| 久久综合网络一区二区| 亚洲人成小说网站色在线| 亚洲小说欧美另类社区| 国产欧美亚洲精品| 久久久久久网| 亚洲精品黄色| 久久精品动漫| 亚洲国产精品美女| 欧美日韩免费观看一区| 亚洲愉拍自拍另类高清精品| 久久视频免费观看| 亚洲精品三级| 国产欧美日韩伦理| 免费观看国产成人| 亚洲一区免费网站| 欧美激情国产高清| 午夜视频一区二区| 91久久精品日日躁夜夜躁欧美 | 欧美中文字幕视频在线观看| 欧美大片国产精品| 亚洲欧美日本国产有色| 在线观看91精品国产麻豆| 欧美日韩成人在线观看| 久久99伊人| 艳妇臀荡乳欲伦亚洲一区| 久久久久久精| 亚洲婷婷综合色高清在线| 国产在线视频不卡二| 欧美日韩一区不卡| 免费看亚洲片| 欧美专区福利在线| 亚洲视频一起| 亚洲国产综合在线| 美女任你摸久久| 欧美亚洲一区在线| 一区二区三区四区在线| 亚洲国产裸拍裸体视频在线观看乱了中文| 欧美三级午夜理伦三级中视频| 久久久久国产精品麻豆ai换脸| 这里只有精品电影| 最新国产成人av网站网址麻豆| 久久久国产视频91| 午夜在线观看欧美| 亚洲视频在线观看免费| 亚洲精品国产精品国自产观看浪潮 | 久久婷婷国产综合国色天香| 夜夜爽www精品| 亚洲精品色图| 亚洲精品免费看| 欧美激情亚洲激情| 欧美成人资源网| 欧美大片在线看免费观看| 久久一区激情| 蜜臀a∨国产成人精品| 久久久久综合| 久久久久看片| 欧美69wwwcom| 欧美成人精品h版在线观看| 久久久亚洲高清| 久久一区二区三区国产精品 | 亚洲高清不卡| 亚洲欧洲精品一区二区三区波多野1战4| 久久亚洲风情| 免费av成人在线| 欧美刺激性大交免费视频| 欧美激情精品久久久久久久变态| 麻豆国产精品777777在线| 免费在线欧美视频| 欧美激情一区二区三区| 亚洲电影一级黄| 亚洲美女网站| 亚洲香蕉在线观看| 先锋影音网一区二区| 久久成人18免费观看| 久久久综合免费视频| 巨乳诱惑日韩免费av| 免费观看久久久4p| 欧美日韩国产一区| 国产美女精品视频免费观看| 国产婷婷色一区二区三区四区| 国际精品欧美精品| 亚洲激情专区| 一区二区三区高清不卡| 亚洲欧美日韩精品| 久久视频一区| 你懂的网址国产 欧美| 亚洲美女黄网| 午夜在线a亚洲v天堂网2018| 久久亚洲视频| 国产精品日本一区二区| 亚洲福利视频网站| 午夜免费在线观看精品视频| 麻豆国产va免费精品高清在线| 亚洲免费观看高清完整版在线观看| 亚洲欧美日韩国产综合| 免费观看成人网| 国产免费成人av| 亚洲美洲欧洲综合国产一区| 欧美一区二区免费观在线| 欧美激情成人在线| 亚洲一区二区三区在线| 欧美激情麻豆| 亚洲电影免费在线| 亚洲欧美色婷婷| 亚洲欧洲另类| 久久久久国产精品一区| 国产精品美女黄网| 亚洲精品中文字幕在线| 美女国产一区| 欧美一区二区三区婷婷月色| 欧美精品一区二区视频|