• <output id="aynwq"><form id="aynwq"><code id="aynwq"></code></form></output>

    <mark id="aynwq"><option id="aynwq"></option></mark>
  • <mark id="aynwq"><option id="aynwq"></option></mark><label id="aynwq"><dl id="aynwq"></dl></label>
  • 學習啦>創業指南>職場>面試題>

    C/C++筆試面試題目

    時間: 護托1061 分享

      C語言是世界上最流行、使用最廣泛的高級程序設計語言之一。下面就由學習啦小編為大家介紹一下C/C++ 筆試、面試題目的文章,歡迎閱讀。

      C/C++ 筆試、面試題目篇1

      1. 什么是“引用”?申明和使用“引用”要注意哪些問題?

      答:引用就是某個目標變量的“別名”(alias),對應用的操作與對變量直接操作效果完全相同。申明一個引用的時候,切記要對其進行初始化。引用聲明完畢后,相當于目標變量名有兩個名稱,即該目標原名稱和引用名,不能再把該引用名作為其他變量名的別名。聲明一個引用,不是新定義了一個變量,它只表示該引用名是目標變量名的一個別名,它本身不是一種數據類型,因此引用本身不占存儲單元,系統也不給引用分配存儲單元。不能建立數組的引用。

      2. 將“引用”作為函數參數有哪些特點?

      (1)傳遞引用給函數與傳遞指針的效果是一樣的。這時,被調函數的形參就成為原來主調函數中的實參變量或對象的一個別名來使用,所以在被調函數中對形參變量的操作就是對其相應的目標對象(在主調函數中)的操作。

      (2)使用引用傳遞函數的參數,在內存中并沒有產生實參的副本,它是直接對實參操作;而使用一般變量傳遞函數的參數,當發生函數調用時,需要給形參分配存儲單元,形參變量是實參變量的副本;如果傳遞的是對象,還將調用拷貝構造函數。因此,當參數傳遞的數據較大時,用引用比用一般變量傳遞參數的效率和所占空間都好。

      (3)使用指針作為函數的參數雖然也能達到與使用引用的效果,但是,在被調函數中同樣要給形參分配存儲單元,且需要重復使用"*指針變量名"的形式進行運算,這很容易產生錯誤且程序的閱讀性較差;另一方面,在主調函數的調用點處,必須用變量的地址作為實參。而引用更容易使用,更清晰。

      3 在什么時候需要使用“常引用”?

      如果既要利用引用提高程序的效率,又要保護傳遞給函數的數據不在函數中被改變,就應使用常引用。常引用聲明方式:const 類型標識符 &引用名=目標變量名;

      例1

      int a;

      constint&ra = a;

      ra = 1; // 錯誤

      a = 1; // 正確

      例2

      string foo( );

      void bar(string&s)

      // 那么下面的表達式將是非法的:

      bar(foo( ));

      bar("hello world");

      原因在于foo( )和"hello world"串都會產生一個臨時對象,而在C++中,這些臨時對象都是const類型的。因此上面的表達式就是試圖將一個const類型的對象轉換為非const類型,這是非法的。

      引用型參數應該在能被定義為const的情況下,盡量定義為const 。

      C/C++ 筆試、面試題目篇2

      1. “引用”與指針的區別是什么?

      指針通過某個指針變量指向一個對象后,對它所指向的變量間接操作。程序中使用指針,程序的可讀性差;

      而引用本身就是目標變量的別名,對引用的操作就是對目標變量的操作。此外,就是上面提到的對函數傳ref和pointer的區別。

      2. 什么時候需要“引用”?

      流操作符<<和>>、賦值操作符=的返回值、拷貝構造函數的參數、賦值操作符=的參數、其它情況都推薦使用引用。

      3. 結構與聯合有和區別?

      1. 結構和聯合都是由多個不同的數據類型成員組成, 但在任何同一時刻, 聯合中只存放了一個被選中的成員(所有成員共用一塊地址空間), 而結構的所有成員都存在(不同成員的存放地址不同)。

      2. 對于聯合的不同成員賦值, 將會對其它成員重寫, 原來成員的值就不存在了, 而對于結構的不同成員賦值是互不影響的。

      C/C++ 筆試、面試題目篇3

      1. 關聯、聚合(Aggregation)以及組合(Composition)的區別?

      涉及到UML中的一些概念:

      關聯是表示兩個類的一般性聯系,比如“學生”和“老師”就是一種關聯關系;

      聚合表示has-a的關系,是一種相對松散的關系,聚合類不需要對被聚合類負責,如下圖所示,用空的菱形表示聚合關系:

      從實現的角度講,聚合可以表示為:

      class A {...} class B { A* a; .....}

      組合表示contains-a的關系,關聯性強于聚合:組合類與被組合類有相同的生命周期,組合類要對被組合類負責,采用實心的菱形表示組合關系:

      實現的形式是:

      class A{...} class B{ A a; ...}

      2.面向對象的三個基本特征,并簡單敘述之?

      1. 封裝:將客觀事物抽象成類,每個類對自身的數據和方法實行protection(private, protected,public)

      2. 繼承:廣義的繼承有三種實現形式:實現繼承(指使用基類的屬性和方法而無需額外編碼的能力)、可視繼承(子窗體使用父窗體的外觀和實現代碼)、接口繼承(僅使用屬性和方法,實現滯后到子類實現)。前兩種(類繼承)和后一種(對象組合=>接口繼承以及純虛函數)構成了功能復用的兩種方式。

      3. 多態:系統能夠在運行時,能夠根據其類型確定調用哪個重載的成員函數的能力,稱為多態性。(見:C++中類的多態與虛函數的使用)

      3. 重載(overload)和重寫(overried,有的書也叫做“覆蓋”)的區別?

      常考的題目。

      從定義上來說:

      重載:是指允許存在多個同名函數,而這些函數的參數表不同(或許參數個數不同,或許參數類型不同,或許兩者都不同)。

      重寫:是指子類重新定義父類虛函數的方法。

      從實現原理上來說:

      重載:編譯器根據函數不同的參數表,對同名函數的名稱做修飾,然后這些同名函數就成了不同的函數(至少對于編譯器來說是這樣的)。如,有兩個同名函數:function func(p:integer):integer;和function func(p:string):integer;。那么編譯器做過修飾后的函數名稱可能是這樣的:int_func、str_func。對于這兩個函數的調用,在編譯器間就已經確定了,是靜態的。也就是說,它們的地址在編譯期就綁定了(早綁定),因此,重載和多態無關!

      重寫:和多態真正相關。當子類重新定義了父類的虛函數后,父類指針根據賦給它的不同的子類指針,動態的調用屬于子類的該函數,這樣的函數調用在編譯期間是無法確定的(調用的子類的虛函數的地址無法給出)。因此,這樣的函數地址是在運行期綁定的(晚綁定)。

      4. 多態的作用?

      主要是兩個:

      1. 隱藏實現細節,使得代碼能夠模塊化;擴展代碼模塊,實現代碼重用;

      2. 接口重用:為了類在繼承和派生的時候,保證使用家族中任一類的實例的某一屬性時的正確調用。

      5. Ado與Ado.net的相同與不同?

      除了“能夠讓應用程序處理存儲于DBMS 中的數據“這一基本相似點外,兩者沒有太多共同之處。但是Ado使用OLE DB 接口并基于微軟的COM 技術,而ADO.NET 擁有自己的ADO.NET 接口并且基于微軟的.NET 體系架構。眾所周知.NET 體系不同于COM 體系,ADO.NET 接口也就完全不同于ADO和OLE DB 接口,這也就是說ADO.NET 和ADO是兩種數據訪問方式。ADO.net 提供對XML 的支持。

      6. New delete 與mallocfree 的聯系與區別?

      答案:都是在堆(heap)上進行動態的內存操作。用malloc函數需要指定內存分配的字節數并且不能初始化對象,new 會自動調用對象的構造函數。delete 會調用對象的destructor,而free 不會調用對象的destructor.

      (可以看看:顯式調用構造函數和析構函數)

      7. #define DOUBLE(x) x+x ,i = 5*DOUBLE(5); i 是多少?

      答案:i 為30。(注意直接展開就是了) 5 * 5 + 5

      8. 有哪幾種情況只能用intializationlist 而不能用assignment?

      答案:當類中含有const、reference 成員變量;基類的構造函數都需要初始化表。

      9. C++是不是類型安全的?

      答案:不是。兩個不同類型的指針之間可以強制轉換(用reinterpret cast)。C#是類型安全的。

      10. main 函數執行以前,還會執行什么代碼?

      答案:全局對象的構造函數會在main 函數之前執行,為malloc分配必要的資源,等等。

      11. 描述內存分配方式以及它們的區別?

      1) 從靜態存儲區域分配。內存在程序編譯的時候就已經分配好,這塊內存在程序的整個運行期間都存在。例如全局變量,static 變量。

      2) 在棧上創建。在執行函數時,函數內局部變量的存儲單元都可以在棧上創建,函數執行結束時這些存儲單元自動被釋放。棧內存分配運算內置于處理器的指令集。

      3) 從堆上分配,亦稱動態內存分配。程序在運行的時候用malloc 或new 申請任意多少的內存,程序員自己負責在何時用free 或delete 釋放內存。動態內存的生存期由程序員決定,使用非常靈活,但問題也最多。

      4) 代碼區。

    3158142 主站蜘蛛池模板: 亚洲欧美日韩中文高清ww| 男女猛烈激情XX00免费视频| 美女久久久久久久久久久| 美女被免费网站91色| 精品人妻系列无码人妻漫画| 狠狠干.com| 欧美在线视频网站| 日韩一级在线播放免费观看| 日本h无羞动漫在线观看网站| 成人精品一区二区三区中文字幕| 富二代app免费下载安装ios二维码 | 亚洲国产精品欧美日韩一区二区| 亚洲人成未满十八禁网站| 久久精品九九热无码免贵| 中文字幕巨大乳在线看| mm1313亚洲国产精品无码试看 | 91免费播放人人爽人人快乐| 精品香蕉在线观看免费| 色婷婷激情综合| 看AV免费毛片手机播放| 美国式禁忌免费看| 网站在线观看你懂的| 步兵精品手机在线观看| 最近免费韩国电影hd视频| 成人口工漫画网站免费| 国产裸体舞一区二区三区| 国产国产人免费人成成免视频| 午夜人妻久久久久久久久| 亚洲欧美日韩精品久久奇米色影视 | 洗澡与老太风流69小说| 日韩欧美视频二区| 天天干天天色天天干| 国产激情一区二区三区成人91| 台湾佬中文222vvv娱乐网在线| 亚洲欧美一区二区三区孕妇| 丰满老妇女好大bbbbb| 97久久天天综合色天天综合色hd | 怡红院成人在线| 精品无码中文视频在线观看| 欧美亚洲国产精品久久| 怡红院免费全部视频在线视频|