• <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++ 技術(shù)中心

               :: 首頁 :: 聯(lián)系 ::  :: 管理
              160 Posts :: 0 Stories :: 87 Comments :: 0 Trackbacks

            公告

            鄭重聲明:本BLOG所發(fā)表的原創(chuàng)文章,作者保留一切權(quán)利。必須經(jīng)過作者本人同意后方可轉(zhuǎn)載,并注名作者(天空)和出處(CppBlog.com)。作者Email:coder@luckcoder.com

            留言簿(27)

            搜索

            •  

            最新隨筆

            最新評(píng)論

            評(píng)論排行榜

            9. 若不想使用編譯器自動(dòng)生成的函數(shù),就該明確的拒絕

            #include "stdafx.h"
            #include <string>

            using namespace  std;

            class UnCopyAble
            {
            protected:
                UnCopyAble(){}
                ~UnCopyAble(){}

            private:
                //放入private,則不允許使用拷貝構(gòu)造和對(duì)象間賦值
                
            //即使不慎在 membre或friend中使用,則鏈接通不過。
                
            //原因是只有聲明
                UnCopyAble(const UnCopyAble&);
                UnCopyAble& operator=(const UnCopyAble &);
            };

            class HomeForSale : private UnCopyAble //class 不再聲明copy構(gòu)造函數(shù)和賦值重載
            {
            public:

            };

            int _tmain(int argc, _TCHAR* argv[])
            {
                HomeForSale sale1;
                
                
                //以下將不允許
                HomeForSale sale2(sale1);

                //以下將不允許
                HomeForSale sale3;
                sale3 = sale1;
                return 0;
            }
            10.為多態(tài)基類聲明virtual析構(gòu)函數(shù)
               
               總結(jié):帶有多態(tài)性質(zhì)的基類應(yīng)該聲明一個(gè)virtual析構(gòu)函數(shù)。如果class帶有任何virutal,它也應(yīng)該擁有一個(gè)virtual析構(gòu)函數(shù)。
            class設(shè)計(jì)目的不是作為基類來使用的,或不是為了具備多態(tài)性,就不應(yīng)該聲明virutal析構(gòu)函數(shù)(一個(gè)類如果加入了virutal函數(shù),則類大小
            會(huì)發(fā)生變化。因?yàn)橛邪瑅irutal table pointer)。

            11. 別讓異常逃離析構(gòu)函數(shù)
             
             析構(gòu)函數(shù)絕對(duì)不要吐出異常,這樣會(huì)帶來“過早結(jié)束程序”或“發(fā)生不明確行為”。如果一個(gè)析構(gòu)函數(shù)可能要拋出異常,析構(gòu)函數(shù)應(yīng)該捕捉任何異常,然后吞下
            它,或者結(jié)束程序。如果要在某個(gè)函數(shù)運(yùn)行時(shí)拋出的異常做出反應(yīng),那么class應(yīng)該提供一個(gè)普通函數(shù)執(zhí)行這個(gè)操作。例如下:
            class DBConn
            {
            public:

                //供客戶使用的函數(shù)
                void Close()
                {
                    db.close();
                    closed = true;
                }

                ~DBConn()
                {
                    if(!closed)
                    {
                        try
                        {
                            db.close(); //關(guān)閉連接,如果客戶不調(diào)用Close的話
                        }
                        catch ()
                        {
                            //寫入日志,記下close調(diào)用失敗
                        }
                    }
                }

            private:
                DBConnection db;
                bool closed;
            12. 絕不在構(gòu)造和析構(gòu)過程中調(diào)用virtual函數(shù)
            // testss.cpp : 定義控制臺(tái)應(yīng)用程序的入口點(diǎn)。
            //

            #include "stdafx.h"
            #include <string>
            #include <list>

            using namespace  std;


            class Transaction
            {
            public:
                Transaction();
                void init();
                virtual void logTranscation() = 0;

            };

            Transaction::Transaction()
            {
                init();
            }

            void Transaction::init()
            {
                logTranscation();
            }

            class BuyTransaction : public Transaction
            {
            public:
                void logTranscation()
                {
                    printf("BuyTransaction log\n");
                }
            };


            int _tmain(int argc, _TCHAR* argv[])
            {
                BuyTransaction b;
                return 0;
            }
            以上代碼,會(huì)有一個(gè)BuyTransaction構(gòu)造函數(shù)被調(diào)用,但首先是Transaction更早被調(diào)用。在derived class對(duì)象的base class構(gòu)造期間,對(duì)象的類型是base class.若使用運(yùn)行期類型信息,也會(huì)把對(duì)象視為base class類型。本例,構(gòu)造函數(shù)中調(diào)用init,而init中調(diào)用Transaction::logTransaction。而logTransaction又是抽象方法,導(dǎo)致程序異常中止。當(dāng)然如果非抽象方法,則會(huì)調(diào)用Transaction中的logTransaction。

                同樣,析構(gòu)函數(shù),一旦derived class析構(gòu)函數(shù)先開始執(zhí)行。對(duì)象內(nèi)的derived class成員變量便呈現(xiàn)現(xiàn)未定義值。所以c++視它們不存在。進(jìn)入base class析構(gòu)函數(shù)后對(duì)象就成為一個(gè)base class對(duì)象。

            13. 令operator=返回一個(gè)reference to *this
            14. 在operator=中處理“自我賦值”
               
            posted on 2014-11-14 14:00 C++技術(shù)中心 閱讀(1873) 評(píng)論(0)  編輯 收藏 引用 所屬分類: C++ 基礎(chǔ)
            久久精品无码专区免费| 亚洲国产精品久久久久| 精品99久久aaa一级毛片| 一本色道久久88综合日韩精品 | 精品免费久久久久久久| 久久久中文字幕| 日本欧美久久久久免费播放网| 国产精品岛国久久久久| 亚洲AV日韩AV天堂久久| 久久久精品久久久久久 | 久久综合狠狠综合久久激情 | 久久大香香蕉国产| 无码八A片人妻少妇久久| 99热热久久这里只有精品68| 欧美va久久久噜噜噜久久| 国产福利电影一区二区三区久久老子无码午夜伦不 | 国产精品久久久久久久久软件| 99久久精品午夜一区二区| 99久久做夜夜爱天天做精品| 国产精品久久毛片完整版| 久久91精品国产91| 久久综合九色欧美综合狠狠 | 最新久久免费视频| 国产精品欧美久久久久天天影视| 久久www免费人成看片| 久久99国产精品久久99小说| 大蕉久久伊人中文字幕| 精品久久久久久无码中文字幕一区| 日韩欧美亚洲综合久久影院Ds| 久久精品亚洲欧美日韩久久| 国产婷婷成人久久Av免费高清| 欧美伊人久久大香线蕉综合| 四虎亚洲国产成人久久精品| 亚洲综合精品香蕉久久网97| 久久精品国产一区| 国产精品VIDEOSSEX久久发布| 色综合久久中文字幕无码| 伊人久久大香线蕉综合Av| 久久精品国产99国产电影网 | 精品久久久久久成人AV| 一本色道久久88精品综合|