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

            麒麟子

            ~~

            導航

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

            統計

            常用鏈接

            留言簿(12)

            隨筆分類

            隨筆檔案

            Friends

            WebSites

            積分與排名

            最新隨筆

            最新評論

            閱讀排行榜

            評論排行榜

            發幾道關于C++基礎知識的題,能不能做自己清楚就行。

            下面這些是基礎題,“高手”們飄過?。?!
            我想一般公司對語言方面,總會變著方法考下面的這些問題。這只是出現的一種形式。有啥好題歡迎大家分享,下面這些是我自己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、不用分支語句或跳轉語句,實現上面的分支執行的功能。


            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);調用上面的函數,哪個能成功,哪個會失敗,為什么。


            9、構造一個簡單的棧。并將 0……9的數壓棧,再逆序輸出。


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


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

            評論

            # re: 發幾道關于C++基礎知識的題,能不能做自己清楚就行。 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
              回復  更多評論   

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

            @anonymous
            哦,不好意思,忘了加繼承關系?,F已修正,謝謝!  回復  更多評論   

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

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

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

            @楚天清秋
            明白三點就知道了。
            1、虛函數
            2、析構函數的調用規則和時機
            3、析構函數和普通成員函數也一樣,只是樣子很特別。   回復  更多評論   

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

            @楚天清秋
            因為A沒有定義虛析構函數  回復  更多評論   

            # re: 發幾道關于C++基礎知識的題,能不能做自己清楚就行。 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  回復  更多評論   

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

            3、isFailed 的值,為什么!

            isFailed=true,函數參數是傳值的  回復  更多評論   

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

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

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

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

            A* p = new B;
            delete p;
            所以應該是
            A和B的析構都執行吧?  回復  更多評論   

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

            A* p = new B;
            delete p;

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

              回復  更多評論   

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

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

            # re: 發幾道關于C++基礎知識的題,能不能做自己清楚就行。 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;
            }

            ---------------------------------
            如果上例改成構造函數的話,應該是打印
            "~A"
            "~B"
              回復  更多評論   

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

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

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

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

            A* p = new B;
            delete p;

            為什么 先執行A的析構函數,然后B的析構就不執行了。

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

            結果很顯然,會打印
            "~B"
            "~A"   回復  更多評論   

            # re: 發幾道關于C++基礎知識的題,能不能做自己清楚就行。 2010-05-11 13:55 春續

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

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

            析構執行是先自己再父類
            但由我們是
            A* p = new B;

            delete p;

            此是delete p;實現時是

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

            可以發現,這次調用的是A的析構。

            而當我們把A的析構聲明成虛函數時。。。 由虛函數調用可知,就會調用到B的析構,在B的析構中就會調用A的析構。

            析構函數除了名字特殊外,和普通函數具有同樣的特性。。。

            那位把析構改成構造函數來實現兩個都輸出的,我只想說,你沒有明白這題的本意?。?!  回復  更多評論   

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

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

              回復  更多評論   

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

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

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

            第二題有問題,結果依賴編譯器。  回復  更多評論   

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

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

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

            @楚天清秋
            所謂的靜態綁定。調用函數的地址在可執行文件中直接寫定(這里是A的析構函數)。無需訪問虛表。  回復  更多評論   

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

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

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

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

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

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

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

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

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

            @12
            干,不可能說全是這種題,只可能會是其中的一道或兩道。??梢钥吹贸鰜恚闶俏宜f的“高手”。 其實不僅是要看你會不會,還要看你對待事情的態度。。  回復  更多評論   

            # re: 發幾道關于C++基礎知識的題,能不能做自己清楚就行。 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();
            }
            : )  回復  更多評論   

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

            7. 其實后2個結果是未定義的
            8. 都是對的,函數參數中的數組已經退化為指針  回復  更多評論   

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

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

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

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



              回復  更多評論   

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

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

            久久免费的精品国产V∧| 日本久久久久亚洲中字幕| 一本久久知道综合久久| 亚洲va中文字幕无码久久 | 久久无码中文字幕东京热| 久久国产AVJUST麻豆| 亚洲精品国产综合久久一线| 久久亚洲私人国产精品vA| 国产成人精品久久| 久久久久久久精品妇女99| 精品午夜久久福利大片| 一本大道久久东京热无码AV| 国产精品成人99久久久久91gav| 久久亚洲中文字幕精品一区| 99久久精品国产一区二区| 少妇精品久久久一区二区三区| 色婷婷综合久久久久中文| 狠狠色丁香久久婷婷综合五月| 久久人人爽人爽人人爽av| 久久国产欧美日韩精品| 国产V综合V亚洲欧美久久| 狠狠色丁香婷婷综合久久来来去 | 欧美一级久久久久久久大片| 久久丫精品国产亚洲av不卡| 久久久久久亚洲AV无码专区| 久久精品国内一区二区三区| 久久久久综合国产欧美一区二区| 久久人人爽人人人人片av| 国产精品久久久久久影院| 色欲综合久久中文字幕网| 99久久精品午夜一区二区| 久久精品国产99久久久香蕉| 久久午夜电影网| 日本道色综合久久影院| 亚洲国产成人乱码精品女人久久久不卡 | 久久99精品久久久久久不卡 | 综合久久给合久久狠狠狠97色| 久久永久免费人妻精品下载| 久久无码国产| 久久久精品午夜免费不卡| 亚洲国产精品久久电影欧美|