• <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>

            C++技術交流

              C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
              6 隨筆 :: 8 文章 :: 1 評論 :: 0 Trackbacks

            多態是指發出同樣的消息被不同類型的對象接收時產生完全不同的行為,簡單的說就是“一個接口,多種算法”。C++語言支持兩種多態性,一種是編譯時的多態,另一種是運行時的多態性。函數和運算符重載是在編譯時完成,稱之為靜態多態,也稱靜態聯編。運行時的多態性是通過虛函數實現,用虛函數實現的多態性稱為動態多態,也稱動態聯編。

            虛函數

            虛函數的定義格式
            在一個類中用關鍵字virtual說明在成員函數稱為虛函數,其定義的格式如下:
            virtual? 函數類型 函數名(形參表)

            函數體
            }
            定義虛函數就是為了實現多態類。在基類中某個成員函數被聲明為虛函數后,這個成員函數通常要在派生類中被重新定義,否則定義虛函數就沒有意義。在派生類中重新定義虛函數時,其函數原型必須與基類中的原型完全相同,否則編譯時會出錯或被當作函數重載處理。如果在基類中說明了虛函數,在它的派生類中與基類中虛函數說明相同的函數一定是虛函數,可以省略關鍵字virtual。


            虛析構函數

            析構函數是在該類對象消亡之前進行一些必要的清理工作,對于動態綁定的虛 函數必須用虛析構函數進行釋放。


            純虛函數和抽象類
            1、
            純虛函數

            純虛函數是一鐘特殊的虛函數,它只有函數的聲明,并沒有具體實現函數的功能。它的一般格式如下:
            virtual <函數返回類型><虛函數名稱><參數列表>=0;

            例:

            #include<iostream.h>
            class shape
            {
            public:
            ?shape(double dfx=0.0,double dfy=0.0);
            ??virtual void draw()=0;//純虛函數
            protected:
            ?double firstx;
            ?double firsty;
            };
            shape::shape(double dfx,double dfy)
            {
            ?firstx=dfx;
            ?firsty=dfy;
            }
            //直線類
            class line:public shape
            {
            public:
            ?line(double dfx=0.0,double dfy=0.0,double dsx=0.0,double dsy=0.0);
            ?void draw();
            protected:
            ?double secondx;
            ?double secondy;
            };
            line::line(double dfx,double dfy,double dsx,double dsy):shape(dfx,dfy)
            {
            ?secondx=dsx;
            ?secondy=dsy;
            }
            void line::draw()
            {
            ?cout<<"繪制一條直線,第一點坐標為:("
            ??<<firstx<<","<<firsty<<"),第二點坐標為:("<<secondx<<","<<secondy<<")"<<endl;
            }
            class circle:public shape
            {
            public:
            ?circle(double dfx=0.0,double dfy=0.0,double dr=0.0);
            ?void draw();
            protected:
            ?double radius;
            };
            circle::circle(double dfx,double dfy,double dr):shape(dfx,dfy)
            {
            ?radius=dr;
            }
            void circle::draw()
            {
            ?cout<<"繪制一個圓,圓心坐標為:("
            ??<<firstx<<","<<firsty<<"),圓的半徑為:"
            ??<<radius<<endl;
            }
            void drawing(shape *ps)
            {
            ?ps->draw();
            }
            void main()
            {
            ?line l(1.0,1.0,9.8,15.2);
            ?circle c(2.0,3.0,12.4);
            ?drawing(&l);
            ?drawing(&c);
            }


            抽象類
            帶有純虛函數的類也稱為抽象類。在繼承體系中,抽象類不能位于底層,它必須有派生類,并且其派生類中必須對抽象類中的純虛函數有具體的實現。一般,抽象類只是撕碎一些通用的操作接口,具體的實現由其派生類完成。

            posted on 2006-06-24 16:33 啊嵩 閱讀(190) 評論(0)  編輯 收藏 引用
            色天使久久综合网天天| 午夜不卡久久精品无码免费| 久久精品国产精品亚洲精品| 久久精品中文字幕无码绿巨人| 一本久久久久久久| 精品久久久久久无码不卡| 久久久久久精品久久久久| 久久精品国产99国产精品澳门| 久久国产精品偷99| 国内精品久久人妻互换| 亚洲Av无码国产情品久久| 久久99国产精一区二区三区| 精品久久久一二三区| 久久99精品久久久久久野外| 国产精品久久久久久吹潮| 欧美日韩精品久久久久| 情人伊人久久综合亚洲| 一本色道久久综合狠狠躁 | 国产免费久久精品99re丫y| 91精品国产9l久久久久| 亚洲香蕉网久久综合影视| 久久精品二区| 久久99亚洲综合精品首页| 99久久精品费精品国产一区二区 | 亚洲欧美精品伊人久久| 日日噜噜夜夜狠狠久久丁香五月| 久久久久久无码国产精品中文字幕| 久久se精品一区二区| 无码人妻久久一区二区三区免费丨| 人人狠狠综合久久亚洲| 久久亚洲精品无码播放| 日韩久久久久中文字幕人妻| 国产成人香蕉久久久久| 中文字幕一区二区三区久久网站| 亚洲中文字幕无码久久2017 | 久久久久亚洲AV无码去区首| 久久精品国产亚洲Aⅴ香蕉| 国产精品va久久久久久久| 精品久久人人妻人人做精品 | 国产精品成人无码久久久久久| 精品综合久久久久久97超人|