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

            天下

            記錄修行的印記

            求一個數(shù),二進(jìn)制表示中含有多少個1

            // 1. 求一個數(shù),二進(jìn)制表示中含有多少個1.
            int func(x)
            {
                
            int countx = 0;
                
            while(x)
                {
                    countx 
            ++;
                    x 
            = x&(x-1);
                }
                
            return countx;


            // 2. 請編寫函數(shù) strcpy。
            char *strcpy(char *strDest, const char *strSrc)
            {
                
            if ( strDest == NULL || strSrc == NULL)  // 必須
                    return NULL ;
                
            if ( strDest == strSrc)            // good
                    return strDest ;
                
            char *tempptr = strDest ;
                
            while*strDest++ = *strSrc++ );
                
            return tempptr ;
            }

            // 3.  下面關(guān)于“聯(lián)合”的題目的輸出?
            union {
                
            int i;
                
            char x[2];
            }a;
            void main()
            {
                a.x[
            0= 10;
                a.x[
            1= 1;
                printf(
            "%d",a.i);
            }
            //答案:266 (低位低地址,高位高地址,內(nèi)存占用情況是Ox010A)

            // 4. 在C++ 程序中調(diào)用被C 編譯器編譯后的函數(shù),為什么要加 extern "C"
            首先,作為extern是C/C++語言中表明函數(shù)和全局變量作用范圍(可見性)的關(guān)鍵字,該關(guān)鍵字告訴編譯器,其聲明的函數(shù)和變量可以在本模塊或其它模塊中使用。
            通常,在模塊的頭文件中對本模塊提供給其它模塊引用的函數(shù)和全局變量以關(guān)鍵字extern聲明。
            例如,如果模塊B欲引用該模塊A中定義的全局變量和函數(shù)時只需包含模塊A的頭文件即可。
            這樣,模塊B中調(diào)用模塊A中的函數(shù)時,在編譯階段,模塊B雖然找不到該函數(shù),但是并不會報錯;它會在連接階段中從模塊A編譯生成的目標(biāo)代碼中找到此函數(shù)
            extern "C"是連接申明(linkage declaration),被extern "C"修飾的變量和函數(shù)是按照C語言方式編譯和連接的.

            // 5. 關(guān)聯(lián)、聚合(Aggregation)以及組合(Composition)的區(qū)別?
            關(guān)聯(lián)  是表示兩個類的一般性聯(lián)系,比如“學(xué)生”和“老師”就是一種關(guān)聯(lián)關(guān)系;
            聚合  表示has
            -a的關(guān)系,是一種相對松散的關(guān)系,聚合類不需要對被聚合類負(fù)責(zé),如下圖所示,用空的菱形表示聚合關(guān)系:
                    聚合可以表示為: 
            class A {};  class B{ A* a; ..}
            組合  表示contains
            -a的關(guān)系,關(guān)聯(lián)性強(qiáng)于聚合:組合類與被組合類有相同的生命周期,組合類要對被組合類負(fù)責(zé),采用實(shí)心的菱形表示組合關(guān)系:
                    實(shí)現(xiàn)的形式是: 
            class A{};   class B{ A a; }

            // 6. 面向?qū)ο蟮娜齻€基本特征,并簡單敘述之?
            1. 封裝:將客觀事物抽象成類,每個類對自身的數(shù)據(jù)和方法實(shí)行protection(privateprotected,public)
            2. 繼承:廣義的繼承有三種實(shí)現(xiàn)形式:實(shí)現(xiàn)繼承(指使用基類的屬性和方法而無需額外編碼的能力)、可視繼承(子窗體使用父窗體的外觀和實(shí)現(xiàn)代碼)、
                     接口繼承(僅使用屬性和方法,實(shí)現(xiàn)滯后到子類實(shí)現(xiàn))。前兩種(類繼承)和后一種(對象組合
            =>接口繼承以及純虛函數(shù))構(gòu)成了功能復(fù)用的兩種方式。
            3. 多態(tài):是將父對象設(shè)置成為和一個或更多的他的子對象相等的技術(shù),賦值之后,父對象就可以根據(jù)當(dāng)前賦值給它的子對象的特性以不同的方式運(yùn)作。
                     簡單的說,就是一句話:允許將子類類型的指針賦值給父類類型的指針。

            // 7. 多態(tài)的作用?
            主要是兩個:
            1. 隱藏實(shí)現(xiàn)細(xì)節(jié),使得代碼能夠模塊化;擴(kuò)展代碼模塊,實(shí)現(xiàn)代碼重用;
            2. 接口重用:為了類在繼承和派生的時候,保證使用家族中任一類的實(shí)例的某一屬性時的正確調(diào)用。
                    
            // 8. New delete 與malloc free 的聯(lián)系與區(qū)別?
            答案:
            都是在堆(heap)上進(jìn)行動態(tài)的內(nèi)存操作。用malloc函數(shù)需要指定內(nèi)存分配的字節(jié)數(shù)并且不能初始化對象,
            new 會自動調(diào)用對象的構(gòu)造函數(shù)。delete 會調(diào)用對象的destructor,而free 不會調(diào)用對象的destructor.

            // 9. 有哪幾種情況只能用intialization list 而不能用assignment?
            答案:當(dāng)類中含有const、reference 成員變量;基類的構(gòu)造函數(shù)都需要初始化表。

            // 10. main 函數(shù)執(zhí)行以前,還會執(zhí)行什么代碼?
            答案:全局對象的構(gòu)造函數(shù)會在main 函數(shù)之前執(zhí)行。

            // 11. 描述內(nèi)存分配方式以及它們的區(qū)別?
            1) 從靜態(tài)存儲區(qū)域分配。內(nèi)存在程序編譯的時候就已經(jīng)分配好,這塊內(nèi)存在程序的整個運(yùn)行期間都存在。例如全局變量,static 變量。
            2) 在棧上創(chuàng)建。在執(zhí)行函數(shù)時,函數(shù)內(nèi)局部變量的存儲單元都可以在棧上創(chuàng)建,函數(shù)執(zhí)行結(jié)束時這些存儲單元自動被釋放。棧內(nèi)存分配運(yùn)算內(nèi)置于處理器的指令集。
            3) 從堆上分配,亦稱動態(tài)內(nèi)存分配。程序在運(yùn)行的時候用malloc 或new 申請任意多少的內(nèi)存,程序員自己負(fù)責(zé)在何時用free 或delete 釋放內(nèi)存。
                動態(tài)內(nèi)存的生存期由程序員決定,使用非常靈活,但問題也最多。

            // 12. 當(dāng)一個類A 中沒有生命任何成員變量與成員函數(shù),這時sizeof(A)的值是多少,如果不是零,請解釋一下編譯器為什么沒有讓它為零.
            答案:肯定不是零。舉個反例,如果是零的話,聲明一個class A[10]對象數(shù)組,而每一個對象占用的空間是零,這時就沒辦法區(qū)分A[0],A[1]…了。

            // 13. static_cast, dynamic_cast和reinterpret_cast的區(qū)別和應(yīng)用
            C風(fēng)格的強(qiáng)制類型轉(zhuǎn)換(Type Cast)很簡單,不管什么類型的轉(zhuǎn)換統(tǒng)統(tǒng)是:
            TYPE b 
            = (TYPE)a。
            const_cast,字面上理解就是去const屬性。
            static_cast,命名上理解是靜態(tài)類型轉(zhuǎn)換。如int轉(zhuǎn)換成char。
            dynamic_cast,命名上理解是動態(tài)類型轉(zhuǎn)換。如子類和父類之間的多臺類型轉(zhuǎn)換。
            reinterpret_cast,僅僅重新解釋類型,但沒有進(jìn)行二進(jìn)制的轉(zhuǎn)換。
            //推薦: http://www.shenmiguo.com/archives/2009/275_cplus-type-cast.html

            // 14. C++關(guān)鍵字:mutable、volatile、explicit以及__based
            volatile: 一個定義為volatile的變量是說這變量可能會被意想不到地改變,這樣,編譯器就不會去假設(shè)這個變量的值了。精確地說就是,
                    優(yōu)化器在用到這個變量時必須每次都小心地重新讀取這個變量的值,而不是使用保存在寄存器里的備份。
                    
            // http://www.cnblogs.com/koya/articles/849158.html
            mutable: 他只能用于類的非靜態(tài)和非常量數(shù)據(jù)成員.如果一個類的成員函數(shù)被聲明為const類型,表示該函數(shù)不會改變對象的狀態(tài),
                    也就是該函數(shù)不會修改類的非靜態(tài)數(shù)據(jù)成員.但是有些時候需要在該類函數(shù)中對類的數(shù)據(jù)成員進(jìn)行賦值.這個時候就需要用mutable了
                    
            // http://www.360doc.com/content/10/0613/11/1595686_32846874.shtml
            explicit
                它的作用是
            "禁止單參數(shù)構(gòu)造函數(shù)"被用于自動型別轉(zhuǎn)換,典型的例子是容器類型,在這種類型的構(gòu)造函數(shù)中你可以將初始長度作為參數(shù)傳遞給構(gòu)造函數(shù).
            __based: 
                該關(guān)鍵字主要用來解決一些和共享內(nèi)存有關(guān)的問題,它允許指針被定義為從某一點(diǎn)開始算的32位偏移值,而不是內(nèi)存種的絕對位置

            explicit 它的作用是"禁止單參數(shù)的構(gòu)造函數(shù)"被用于后臺自動類型轉(zhuǎn)換,意味著單參數(shù)構(gòu)造函數(shù)不能用來創(chuàng)建隱式臨時對象!
            否則一些寬松的規(guī)則將允許在沒有顯式類型轉(zhuǎn)換操作的情況下進(jìn)行類型轉(zhuǎn)換。
            考慮下面的例子:
            IntCell obj;
            obj 
            = 37;//should not compile:type mismatch

            C
            ++擁有寬松的規(guī)則,通常,單參數(shù)構(gòu)造函數(shù)定義了一個隱式類型轉(zhuǎn)換,該轉(zhuǎn)換創(chuàng)建一個臨時對象,從而賦值(或函數(shù)參數(shù))變成兼容的。
            在本例中,編譯器試圖將
            obj 
            = 37;
            轉(zhuǎn)換為
            IntCell tempobj 
            = 37;
            obj 
            = tempobj;


            // 15. 類成員函數(shù)的重載、覆蓋和隱藏區(qū)別?
            a.成員函數(shù)被重載的特征:
            1)相同的范圍(在同一個類中);
            2)函數(shù)名字相同;
            3)參數(shù)不同;
            4virtual 關(guān)鍵字可有可無。
            b.覆蓋是指派生類函數(shù)覆蓋基類函數(shù),特征是:
            1)不同的范圍(分別位于派生類與基類);
            2)函數(shù)名字相同;
            3)參數(shù)相同;
            4)基類函數(shù)必須有virtual 關(guān)鍵字。
            c.“隱藏”是指派生類的函數(shù)屏蔽了與其同名的基類函數(shù),規(guī)則如下:
            1)如果派生類的函數(shù)與基類的函數(shù)同名,但是參數(shù)不同。此時,不論有無virtual關(guān)鍵字,基類的函數(shù)將被隱藏(注意別與重載混淆)。
            2)如果派生類的函數(shù)與基類的函數(shù)同名,并且參數(shù)也相同,但是基類函數(shù)沒有virtual 關(guān)鍵字。此時,基類的函數(shù)被隱藏(注意別與覆蓋混淆)

            // 16. 如何打印出當(dāng)前源文件的文件名以及源文件的當(dāng)前行號?
            cout << __FILE__ ;
            cout
            <<__LINE__ ;
            __FILE__和__LINE__是系統(tǒng)預(yù)定義宏,這種宏并不是在某個文件中定義的,而是由編譯器定義的。

            // 17. main 主函數(shù)執(zhí)行完畢后,是否可能會再執(zhí)行一段代碼,給出說明?
            答案:可以,可以用_onexit 注冊一個函數(shù),它會在main 之后執(zhí)行.

            // 18. 如何判斷一段程序是由C 編譯程序還是由C++編譯程序編譯的?
            #ifdef __cplusplus
                cout
            <<"c++";
            #else
                cout
            <<"c";
            #endif


            class IntCell
            {
            public :
                
            explicit IntCell(int val=0):m_val(val){}
            private:
                
            int m_val;
            };


            posted on 2013-03-18 15:02 天下 閱讀(634) 評論(0)  編輯 收藏 引用 所屬分類: C/C++

            <2014年3月>
            2324252627281
            2345678
            9101112131415
            16171819202122
            23242526272829
            303112345

            導(dǎo)航

            統(tǒng)計(jì)

            常用鏈接

            留言簿(4)

            隨筆分類(378)

            隨筆檔案(329)

            鏈接

            最新隨筆

            搜索

            最新評論

            久久99国产精品久久99果冻传媒| 欧美亚洲国产精品久久| 久久亚洲精品无码VA大香大香| 99久久免费国产精精品| 国产成人久久精品一区二区三区| 久久精品国产欧美日韩99热| 中文成人久久久久影院免费观看| 老司机午夜网站国内精品久久久久久久久 | 国产成人综合久久精品尤物| 久久91精品国产91久久麻豆| 996久久国产精品线观看| 2022年国产精品久久久久| 久久综合给久久狠狠97色| 久久er99热精品一区二区| 99久久免费国产特黄| 国产激情久久久久影院老熟女 | 99久久精品国产高清一区二区 | 成人综合久久精品色婷婷| 国产成年无码久久久免费| 亚洲va久久久噜噜噜久久| 99国产欧美久久久精品蜜芽| 91秦先生久久久久久久| 亚洲性久久久影院| AV狠狠色丁香婷婷综合久久| 国产精品美女久久久网AV| 中文精品久久久久国产网址| 久久综合色之久久综合| 99久久99久久精品国产片果冻| 国产情侣久久久久aⅴ免费| 久久综合久久综合久久| 热久久视久久精品18| 国产欧美久久久精品| 亚洲国产成人久久笫一页| 97r久久精品国产99国产精| 久久99亚洲综合精品首页| 亚洲乱码中文字幕久久孕妇黑人| 久久精品国产亚洲麻豆| 亚洲国产视频久久| 99久久精品免费国产大片| 无码国内精品久久人妻| 久久亚洲中文字幕精品一区|