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

            麒麟子

            ~~

            導(dǎo)航

            <2025年5月>
            27282930123
            45678910
            11121314151617
            18192021222324
            25262728293031
            1234567

            統(tǒng)計

            常用鏈接

            留言簿(12)

            隨筆分類

            隨筆檔案

            Friends

            WebSites

            積分與排名

            最新隨筆

            最新評論

            閱讀排行榜

            評論排行榜

            發(fā)幾道關(guān)于C++基礎(chǔ)知識的題,能不能做自己清楚就行。

            下面這些是基礎(chǔ)題,“高手”們飄過!!!
            我想一般公司對語言方面,總會變著方法考下面的這些問題。這只是出現(xiàn)的一種形式。有啥好題歡迎大家分享,下面這些是我自己YY的。看題的兄弟只需在自己心里作答就行,一定不要忘了幾乎每題都有一個“ 為什么”。

             1class A
             2{
             3public:
             4    ~A(){cout<<"~A"<<endl;}
             5}
            ;
             6
             7class B:public A
             8{
             9public:
            10    ~B(){cout<<"~B"<<endl;}
            11}
            ;
            12
            13A* p = new B;
            14delete p;
            1、請問上面輸出什么,為什么!


             1class A
             2{};
             3
             4class B
             5{
             6   void f(){}
             7    int i;
             8}
            ;
             9
            10class C
            11{
            12   virtual void f(){}
            13}
            ;
            14
            15class D:public B,public C
            16{}
            17
            18int n1 = sizeof(A);
            19int n2 = sizeof(B);
            20int n3 = sizeof(C);
            21int n4 = sizeof(D);
            22
            2、n1  n2 n3 n4的值是多少,為什么!


             1void _MyNew(int* p)
             2{
             3  p = new int;
             4}

             5
             6int*= NULL;
             7bool isFailed = false;
             8_MyNew(p);
             9
            10if(p==NULL)
            11  isFailed = true;
            3、isFailed 的值,為什么!


            4、指針的函義(答案靈活,看理解程度)


            1int f(int a)
            2{
            3   if(a>0)
            4   
            5      return 0
            6   }

            7   return a;
            8}
            5、不用分支語句或跳轉(zhuǎn)語句,實現(xiàn)上面的分支執(zhí)行的功能。


            void f1(){}
            void f2(){}

            void test(bool bf)
            {
               
            if(bf)
                 f1();
               
            else
                 f2();
            }
            6、要求與5題相同。


            1void* p = NULL; p++;
            2char* q = NULL; q++;
            3int* r = NULL; r++;
            7、上面的語句是否合法,如果合法,p ,q,r的值分別是多少。為什么!

            1void f(int* p){}
            2void f(int p[]){}
            3
            8、如果我使用f(NULL);調(diào)用上面的函數(shù),哪個能成功,哪個會失敗,為什么。


            9、構(gòu)造一個簡單的棧。并將 0……9的數(shù)壓棧,再逆序輸出。


            10、你能解釋float f;   int a = *(int*)&f;這句代碼的含義么?


            posted on 2010-05-11 08:52 麒麟子 閱讀(3790) 評論(31)  編輯 收藏 引用 所屬分類: Programming

            評論

            # re: 發(fā)幾道關(guān)于C++基礎(chǔ)知識的題,能不能做自己清楚就行。 2010-05-11 09:26 anonymous

            第一題編譯錯誤。g++ 4.4.1
            test.cpp: In function ‘int main()’:
            test.cpp:17: error: cannot convert ‘B*’ to ‘A*’ in initialization
              回復(fù)  更多評論   

            # re: 發(fā)幾道關(guān)于C++基礎(chǔ)知識的題,能不能做自己清楚就行。 2010-05-11 09:33 小時候可靚了

            @anonymous
            哦,不好意思,忘了加繼承關(guān)系。現(xiàn)已修正,謝謝!  回復(fù)  更多評論   

            # re: 發(fā)幾道關(guān)于C++基礎(chǔ)知識的題,能不能做自己清楚就行。 2010-05-11 10:10 楚天清秋

            1、請問上面輸出什么,為什么!
            為啥只打出 ~A 呢。。。  回復(fù)  更多評論   

            # re: 發(fā)幾道關(guān)于C++基礎(chǔ)知識的題,能不能做自己清楚就行。 2010-05-11 10:14 小時候可靚了

            @楚天清秋
            明白三點就知道了。
            1、虛函數(shù)
            2、析構(gòu)函數(shù)的調(diào)用規(guī)則和時機(jī)
            3、析構(gòu)函數(shù)和普通成員函數(shù)也一樣,只是樣子很特別。   回復(fù)  更多評論   

            # re: 發(fā)幾道關(guān)于C++基礎(chǔ)知識的題,能不能做自己清楚就行。 2010-05-11 11:23 北海鯤鵬

            @楚天清秋
            因為A沒有定義虛析構(gòu)函數(shù)  回復(fù)  更多評論   

            # re: 發(fā)幾道關(guān)于C++基礎(chǔ)知識的題,能不能做自己清楚就行。 2010-05-11 11:26 北海鯤鵬

            1 void* p = NULL; p++;
            2 char* q = NULL; q++;
            3 int* r = NULL; r++;
            7、上面的語句是否合法,如果合法,p ,q,r的值分別是多少。為什么!

            1 不合法,因為void類型沒有size
            2 q=1
            3 r=4  回復(fù)  更多評論   

            # re: 發(fā)幾道關(guān)于C++基礎(chǔ)知識的題,能不能做自己清楚就行。 2010-05-11 11:28 北海鯤鵬

            3、isFailed 的值,為什么!

            isFailed=true,函數(shù)參數(shù)是傳值的  回復(fù)  更多評論   

            # re: 發(fā)幾道關(guān)于C++基礎(chǔ)知識的題,能不能做自己清楚就行。 2010-05-11 11:46 小時候可靚了

            @北海鯤鵬
            嗯,突然發(fā)現(xiàn)變量命名有點問題,我想你說的是對的。  回復(fù)  更多評論   

            # re: 發(fā)幾道關(guān)于C++基礎(chǔ)知識的題,能不能做自己清楚就行。 2010-05-11 12:36 楚天清秋

            @小時候可靚了
            照理說析構(gòu)時時先 執(zhí)行自己的析構(gòu)函數(shù),然后執(zhí)行父類的析構(gòu)函數(shù),如果有多繼承,按照父類的聲明順序來執(zhí)行析構(gòu)函數(shù)。

            A* p = new B;
            delete p;
            所以應(yīng)該是
            A和B的析構(gòu)都執(zhí)行吧?  回復(fù)  更多評論   

            # re: 發(fā)幾道關(guān)于C++基礎(chǔ)知識的題,能不能做自己清楚就行。 2010-05-11 12:39 楚天清秋

            A* p = new B;
            delete p;

            ~~~~~~~~
            delete p;
            A的指針,但實例是B的,
            到底是先執(zhí)行A的析構(gòu)函數(shù),還是B的析構(gòu)函數(shù)。
            如果是先執(zhí)行A的析構(gòu)函數(shù),A的析構(gòu)函數(shù)由于不是Virtual的,所以不會執(zhí)行B的析構(gòu)函數(shù),這就說得通!

              回復(fù)  更多評論   

            # re: 發(fā)幾道關(guān)于C++基礎(chǔ)知識的題,能不能做自己清楚就行。 2010-05-11 12:46 北海鯤鵬

            @楚天清秋
            寫段代碼跑一下就知道了,可以找一下關(guān)于C++類型綁定的文章  回復(fù)  更多評論   

            # re: 發(fā)幾道關(guān)于C++基礎(chǔ)知識的題,能不能做自己清楚就行。 2010-05-11 12:46 楚天清秋

            class A
            {
            public:
            A(){cout<<"~A"<<endl;}
            };

            class B:public A
            {
            public:
            B(){cout<<"~B"<<endl;}
            };

            main()
            {
            A* p = new B;
            delete p;

            return 0;
            }

            ---------------------------------
            如果上例改成構(gòu)造函數(shù)的話,應(yīng)該是打印
            "~A"
            "~B"
              回復(fù)  更多評論   

            # re: 發(fā)幾道關(guān)于C++基礎(chǔ)知識的題,能不能做自己清楚就行。 2010-05-11 12:47 北海鯤鵬

            @楚天清秋
            寫段代碼跑一下就知道了,可以找一下關(guān)于 C++類型綁定的文章  回復(fù)  更多評論   

            # re: 發(fā)幾道關(guān)于C++基礎(chǔ)知識的題,能不能做自己清楚就行。 2010-05-11 12:51 楚天清秋

            @北海鯤鵬
            謝謝,代碼寫了也調(diào)試過,就是不明白

            A* p = new B;
            delete p;

            為什么 先執(zhí)行A的析構(gòu)函數(shù),然后B的析構(gòu)就不執(zhí)行了。

            ------------
            如果改成
            B* p = new B;
            delete p;

            結(jié)果很顯然,會打印
            "~B"
            "~A"   回復(fù)  更多評論   

            # re: 發(fā)幾道關(guān)于C++基礎(chǔ)知識的題,能不能做自己清楚就行。 2010-05-11 13:55 春續(xù)

            第四如何做,這個不會。  回復(fù)  更多評論   

            # re: 發(fā)幾道關(guān)于C++基礎(chǔ)知識的題,能不能做自己清楚就行。 2010-05-11 14:01 小時候可靚了

            析構(gòu)執(zhí)行是先自己再父類
            但由我們是
            A* p = new B;

            delete p;

            此是delete p;實現(xiàn)時是

            if( p != NULL)
            p->destructor();

            可以發(fā)現(xiàn),這次調(diào)用的是A的析構(gòu)。

            而當(dāng)我們把A的析構(gòu)聲明成虛函數(shù)時。。。 由虛函數(shù)調(diào)用可知,就會調(diào)用到B的析構(gòu),在B的析構(gòu)中就會調(diào)用A的析構(gòu)。

            析構(gòu)函數(shù)除了名字特殊外,和普通函數(shù)具有同樣的特性。。。

            那位把析構(gòu)改成構(gòu)造函數(shù)來實現(xiàn)兩個都輸出的,我只想說,你沒有明白這題的本意!!!  回復(fù)  更多評論   

            # re: 發(fā)幾道關(guān)于C++基礎(chǔ)知識的題,能不能做自己清楚就行。 2010-05-11 15:00 Jakcie

            第1題,只輸出~A,因為不是虛析構(gòu)函數(shù)。
            第2題,1,4,4,8
            第3題,北海鯤鵬的回答是對的。把指針傳進(jìn)去,也是按傳值的。要實現(xiàn)題中的目標(biāo),應(yīng)該用指針的指針。
            第5題,a=(a-abs(a))/2;
            第6題,不知道。
            第7題,北海鯤鵬的回答是對的。
            第8題,調(diào)用void f(int* p)成功。void f(int p[])失敗。因為p[]是數(shù)組,不可能是NULL。
            第9題,怎么實現(xiàn)都行。
            第10題,把float在內(nèi)存中的表示強(qiáng)制轉(zhuǎn)換為int類型。

              回復(fù)  更多評論   

            # re: 發(fā)幾道關(guān)于C++基礎(chǔ)知識的題,能不能做自己清楚就行。 2010-05-11 15:09 小時候可靚了

            各位可以不用回復(fù)在此,因為我預(yù)計這每道題回答的字?jǐn)?shù)還是有百來字的。 而回答在這里肯定打不了那么多。 所以,自已知道就行了。。。 但是,你只需問你自己。。 真的知道嗎? 知道到了哪種程度。。。 希望大家越來越有興趣去探究底細(xì),發(fā)現(xiàn)那些總以為會很神秘的“幕后”。  回復(fù)  更多評論   

            # re: 發(fā)幾道關(guān)于C++基礎(chǔ)知識的題,能不能做自己清楚就行。[未登錄] 2010-05-11 18:44

            第二題有問題,結(jié)果依賴編譯器。  回復(fù)  更多評論   

            # re: 發(fā)幾道關(guān)于C++基礎(chǔ)知識的題,能不能做自己清楚就行。 2010-05-11 18:57 小時候可靚了

            @壞
            我又沒有要你答案,你只要能知道你自已常用的那個編譯器是啥值就行了。。。  回復(fù)  更多評論   

            # re: 發(fā)幾道關(guān)于C++基礎(chǔ)知識的題,能不能做自己清楚就行。[未登錄] 2010-05-11 21:32 ~

            @楚天清秋
            所謂的靜態(tài)綁定。調(diào)用函數(shù)的地址在可執(zhí)行文件中直接寫定(這里是A的析構(gòu)函數(shù))。無需訪問虛表。  回復(fù)  更多評論   

            # re: 發(fā)幾道關(guān)于C++基礎(chǔ)知識的題,能不能做自己清楚就行。 2010-05-11 22:04 小時候可靚了

            @~
            如果你有機(jī)會看到這留言,你可以說得更明白些么?  回復(fù)  更多評論   

            # re: 發(fā)幾道關(guān)于C++基礎(chǔ)知識的題,能不能做自己清楚就行。 2010-05-12 15:14 小熙

            float f =1.1;
            int a = *(int*)&f;
            cout<<a<<endl;
            調(diào)試了一下,并不是輸出1,輸出1066192077,不懂  回復(fù)  更多評論   

            # re: 發(fā)幾道關(guān)于C++基礎(chǔ)知識的題,能不能做自己清楚就行。 2010-05-12 18:15 Ocean.X

            @小熙
            浮點和整形在內(nèi)存存儲上是不一樣的,這個相當(dāng)于將float指針之后的sizeof(float)的數(shù)據(jù)按整形的存儲方式去讀取,結(jié)果當(dāng)然不會是1  回復(fù)  更多評論   

            # re: 發(fā)幾道關(guān)于C++基礎(chǔ)知識的題,能不能做自己清楚就行。[未登錄] 2010-05-14 15:07 12

            - -一不小心我全做對了。。
            我的求職經(jīng)驗證明。。 如果全是這樣的題目的公司,或者搬抄林銳的書的公司都是垃圾公司  回復(fù)  更多評論   

            # re: 發(fā)幾道關(guān)于C++基礎(chǔ)知識的題,能不能做自己清楚就行。[未登錄] 2010-05-15 18:48 小時候可靚了

            @12
            干,不可能說全是這種題,只可能會是其中的一道或兩道。。可以看得出來,你是我所說的“高手”。 其實不僅是要看你會不會,還要看你對待事情的態(tài)度。。  回復(fù)  更多評論   

            # re: 發(fā)幾道關(guān)于C++基礎(chǔ)知識的題,能不能做自己清楚就行。 2010-05-18 10:05 installB

            7.
            void test(bool bf)
            {
            typedef void (*PFUNC)(void);
            PFUNC fu1 = f1;
            PFUNC fu2 = f2;
            int a1 = (int)(fu1);
            int a2 = (int)(fu2);
            int a3 = a1 * bf + a2 * !bf;
            PFUNC F = (PFUNC)a3;
            F();
            }
            : )  回復(fù)  更多評論   

            # re: 發(fā)幾道關(guān)于C++基礎(chǔ)知識的題,能不能做自己清楚就行。 2010-05-22 15:39

            7. 其實后2個結(jié)果是未定義的
            8. 都是對的,函數(shù)參數(shù)中的數(shù)組已經(jīng)退化為指針  回復(fù)  更多評論   

            # re: 發(fā)幾道關(guān)于C++基礎(chǔ)知識的題,能不能做自己清楚就行。 2010-05-27 00:26 小時候可靚了

            @啊
            嗯,我也不能說你對與錯,只要你在你熟知的編譯環(huán)境里能驗證你的答案就行。  回復(fù)  更多評論   

            # re: 發(fā)幾道關(guān)于C++基礎(chǔ)知識的題,能不能做自己清楚就行。 2010-06-22 00:03 flyinghearts

            3、isFailed 的值永遠(yuǎn)為false,即使將void _MyNew(int* p)改為void _MyNew(int* &p),因為new失敗不返回NULL,而是拋異常bad_alloc。



              回復(fù)  更多評論   

            # re: 發(fā)幾道關(guān)于C++基礎(chǔ)知識的題,能不能做自己清楚就行。[未登錄] 2013-05-21 14:07 123

            void test(bool bf)
            {
            void(*ptr[2])() = {f2,f1};
            ptr[bf]();
            }  回復(fù)  更多評論   

            亚洲国产精品久久久久| 亚洲综合精品香蕉久久网| 久久99精品久久久久久噜噜| 伊人久久大香线蕉无码麻豆| 久久精品人成免费| 久久精品一区二区影院| 色狠狠久久AV五月综合| 人妻少妇精品久久| 99久久久国产精品免费无卡顿| 国产福利电影一区二区三区,免费久久久久久久精 | 久久久久久久久波多野高潮| 国内精品久久久久影院优| 亚洲国产婷婷香蕉久久久久久| 久久久久亚洲AV片无码下载蜜桃| 久久se精品一区二区影院| 久久亚洲私人国产精品vA| 亚洲午夜无码久久久久小说| 国产精品美女久久久久av爽| 久久久久久精品久久久久| 精品久久久久久无码中文野结衣| 人妻精品久久无码专区精东影业 | 久久久久久久97| 国产色综合久久无码有码| 久久亚洲精品无码观看不卡| 青青青青久久精品国产h| 久久综合综合久久综合| 伊人久久大香线焦AV综合影院| 久久精品综合一区二区三区| 一本大道久久a久久精品综合| 亚洲色婷婷综合久久| 四虎久久影院| 亚洲国产成人久久笫一页| 欧美精品福利视频一区二区三区久久久精品 | 精品久久久久久国产三级| 日韩一区二区久久久久久| 久久久国产精品福利免费| 国产一久久香蕉国产线看观看 | 国产69精品久久久久APP下载| 亚洲国产精品无码久久久久久曰| 久久久久人妻精品一区三寸蜜桃| 狠狠色综合网站久久久久久久|