C/C++基礎知識總結

来源:https://www.cnblogs.com/gcl0909031172/archive/2018/10/05/9744741.html
-Advertisement-
Play Games

本文主要是簡單的總結了一下找工作的過程中,需要瞭解的一些C/C++的基礎知識點。 ...


寫在前面:對於即將離開象牙塔的我們,需要面臨的一個首要問題就是如何在社會中占據一席之地。在這裡,我想說是:機會總是留給有準備的人的!我不是在這裡空喊口號,而是以我過來人的經驗來告誡你們,任何的僥幸心理都不要有,只要你努力了、有準備了、足夠優秀了,工作的offer自然會飛到你手裡。

說明:本篇文章的參考書籍是——《C/C++程式員面試寶典》,我認為每一位找工作的同學,都可以去讀一讀,真心的很不錯。

《C/C++程式員面試寶典》PDF下載地址:https://pan.baidu.com/s/1C76706fG0AzoVAVQ1YkGSw

 

C/C++基礎知識總結

1、C++中的基本數據類型有哪些?

答:3種類型:整數型、浮點型、void型。

2、整型有幾種形式,各種形式有什麼區別?

答:整型包括整數,字元和布爾值的算術類型,根據修飾符細分為13種形式,其主要區別體現在類型名、長度、表示範圍幾個方面。

3、C++中有哪些常量?

答:6種常量:整型常量、浮點型常量、字元型常量、字元串常量、轉義字元常量、地址常量。

4、常量與變數有哪些區別?

答:(1)常量的值不可改變,變數的值可以改變;(2)常量在定義時必須初始化,變數在定義可以不初始化;(3)常量不可以定址,其地址只可賦予常量指針,變數可以定址;(4)常量有較高的編譯執行效率;

5、操作符有哪些分類?

答:(1)按照操作數區分:一元操作符、二元操作符、三元操作符;(2)按照功能區分:算術操作符、關係操作符、邏輯操作符、位操作符、賦值操作符、自增自減操作符、箭頭操作符、條件操作符、sizeof操作符、逗號操作符。

6、自增自減前操作與後操作的區別?

答:前自增自減操作的優先順序大於賦值運算符(=),後自增自減操作的優先順序小於賦值運算符,後自增自減操作後表達式的值不會發生改變。

7、指針和變數的自增自減有什麼不同?

答:變數的自增自減是改變變數的值,指針的自增自減是改變指針的指向地址。

8、什麼是左值和右值?

答:變數是左值,可以在賦值語句的左邊;數字字面值是右值,不能被賦值。

9、變數有哪幾種初始化方式?

答:2種:直接初始化;複製初始化。直接初始化更加靈活而且執行效率更高。

10、變數的聲明和定義是什麼?

答:變數聲明的主要目的是表明變數的類型和名稱;變數定義的主要目的是分配存儲空間,它們有相同的時候。

11、C++中有哪幾種作用域?

答:3種:全局作用域、局部作用域、語句作用域。

12、變數有哪幾種存儲類型?

答:4種:自動類型、靜態類型、寄存器類型、外部類型。

13、C與C++有什麼區別?

答:C語言是結構化的編程語言,它是面向過程的,考慮的是實現過程;C++是面向對象的,考慮的是整個程式模型。

14、巨集定義與操作符的區別?

答:巨集定義是C++的預處理命令之一,它是一個替換操作,不做計算和表達式求解,不占記憶體和編譯時間。

15、虛函數與純虛函數的特點?

答:虛函數必須是基類的非靜態成員函數,其訪問許可權可以是protected或public;純虛函數是虛函數的一個子集,含有純虛函數的類就是抽象類,它不能生成對象。

16、如何使用純虛函數?

答:純虛函數用來定義沒有意義的實現,用於抽象類中需要交給派生類具體實現的方法。

17、什麼是指針?

答:指針是用來存儲記憶體地址的變數,它指向單個對象的地址,除了void指針類型外,指針的數據類型與所指向地址的變數的數據類型需要保持一致。

18、const對象的指針和const指針的區別?

答:const指針本身的值不可改變,但可以使用該指針修改它所指對象的值;const變數的指針不可以修改所指向的const變數的值,但指針本身可以被重新賦值。

19、數組指針與指針數組的區別?

答:數組指針是一個指針變數,它指向一個數組;指針數組是一個只包含指針元素的數組,它的元素可以指向相同類型的不同對象。

20、什麼是函數指針?

答:函數指針就是指向函數的存儲空間地址的指針,可以對函數指針進行賦值並通過函數指針來調用函數。

21、引用與值傳遞的區別?

答:值傳遞傳遞的是一個值的副本,函數對形參的操作不會影響實參的值;引用傳遞傳遞的是引用對象的記憶體地址,函數對形參的操作會影響實參的值,實參的值會隨著形參的值得改變而改變。

22、指針與引用的區別?

答:(1)引用無需解引用,指針需要解引用;(2)引用在定義時被初始化一次,之後不可變,指針可變;(3)引用不能為空,指針可以為空;(4)程式為指針變數分配記憶體區域,而引用不需要分配記憶體區域,所以指針自增操作是指針變數的自增,引用自增操作是變數值的自增。

23、面向對象與面向過程的區別?

答:面向過程是一種以過程為中心的編程思想,以演算法進行驅動;面向對象是一種以對象為中心的編程思想,以消息進行驅動。面向過程編程語言的組成:程式=演算法+數據;面向對象編程語言的組成:程式=對象+消息。

24、面向對象的特征是什麼?

答:面對對象的3個要素:封裝,繼承,多態。面向對象中所有對象都可以歸屬為一個類。

25、類與結構體有什麼區別?

答:(1)結構體存儲在棧中,類的實例化可以存儲在棧中,也可以存儲在堆中;(2)結構體的執行效率比類要高;(3)結構體沒有析構函數,類有析構函數;(4)結構體不可以繼承,類可以繼承。

26、如何訪問靜態成員?

答:靜態成員可以通過類名直接調用,不需要創建類的實例,也可以通過類的實例進行調用,但底層仍然是通過類名調用的,所以不推薦這種調用方法。類的靜態方法只能訪問類的靜態成員。

27、什麼是多態?

答:多態就是將子類對象賦給父類變數,父類變數在編譯期和運行期表現出不同的特性。

28、在C++中如何實現多態?

答:多態有動態多態、靜態多態、函數多態和巨集多態等,我們常說的多態指的是動態多態,它是基於繼承機制和虛函數來實現的。

29、派生類與基類的轉換?

答:派生類總是可以轉換為基類的引用類型;基類轉換為派生類需要在確定安全的情況下使用強制轉換來實現。

30、什麼是虛成員,有什麼作用?

答:虛函數的作用是實現動態聯編,程式發現虛函數名前的關鍵字virtual後,會自動將其作為動態聯編處理,即在程式運行時動態的選擇合適的成員函數。

31、C++覆蓋與隱藏概述?

答:(1)覆蓋指的是在子類和父類中,存在函數名、參數均相同的函數,並且父類的該函數為虛函數;(2)隱藏指的是在子類與父類中,存在函數名相同、參數不同的函數,此時無論父類函數是否為虛函數,父類函數都會被被隱藏,或者存在函數名、參數均相同的函數,此時只有當父類函數不為虛函數時,父類函數才會被隱藏。

32、什麼是深拷貝與淺拷貝?

答:如果一個類擁有資源,當這個類的資源發生複製過程時,就叫做深拷貝;如果對象存在資源但在複製過程中並未複製資源就是淺拷貝。

33、什麼是拷貝構造函數,什麼時候調用?

答:拷貝構造函數由編譯器調用來完成一些基於同一類的其他對象的構建及初始化。有3種情況會使用拷貝構造函數:(1)一個對象以值傳遞的方式傳入函數體;(2)一個對象以值傳遞的方式從函數返回;(3)一個對象需要通過另外一個對象進行初始化。

34、什麼是類型轉換構造函數?

答:一個類的構造函數只有一個參數,該參數類型不為該類類型而是其他類型,這個構造函數就被稱為類型轉換構造函數,它可以用來處理不同域的同一數據值。

35、C++支持參數個數不確定的函數嗎?

答:C++可以通過隱藏參數機制支持參數不確定的函數。

36、什麼是內聯函數?

答:在類聲明的內部聲明或定義的成員函數叫做內聯(inline)函數,在內聯函數內不允許有迴圈語句和switch語句。

37、引用形參與非引用形參的區別?

答:引用形參是將參數變數的地址來進行傳遞,可以通過函數對形參的調用來修改實參的值。

38、使用引用形參有什麼問題?

答:調用非const類型的引用形參,實參必須不是const類型,二者類型應當一致;當調用一個有const引用的形參函數時,如果實參不是一個變數或者類型不匹配時,函數會創建一個無名的臨時變數用來存儲實參的值,並把這個形參作為該臨時變數的引用。

39、指針形參和引用形參有什麼區別?

答:指針形參是指函數的參數是指針,它不會像引用形參那樣通過函數調用影響實參的值,但是調用後它會修改實參的對象。程式中建議儘量少使用指針形參,這樣會使程式的可讀性下降。

40、什麼是靜態函數?如何使用靜態函數?

答:靜態函數是用static修飾符修飾的函數,靜態函數沒有this指針,只能訪問靜態變數。類中如果函數調用的結果不會訪問或者修改任何對象數據成員,這樣的成員聲明為靜態成員函數比較好。

41、函數重載及作用域?

答:函數重載是指在相同作用域下,具有相同名稱而不同參數列表的多個函數。

42、函數重載時如何實現實參的類型轉換?

答:在函數重載匹配時,先通過標準轉換來實現匹配,如果不行,再通過類類型轉換來實現匹配。

43、什麼是函數模板?

答:函數模板技術是指使用了模板技術定義了參數化類型的非成員函數,這使得程式能夠使用不同的參數類型調用相同的函數。

44、什麼是類模板?

答:類模板是使用模板技術的類,描述了能夠管理其他數據類型的通用數據類型。類模板技術通常用於建立包含其他類型的容器類(隊列、鏈表、堆棧等)。

45、什麼是泛型編程?

答:泛型編程就是以獨立於特定類實現的方式編寫代碼,針對不同的類型提供通用的實現。

46、C++如何實現泛型編程?

答:C++中泛型編程的實現是使用C++中的模板技術來實現的,主要是設計函數模板和類模板。

 

後記:歡迎各路大神批評與指正!


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 摘要:本文是Java基礎教程系列的第一篇文章。主要從什麼是Java語言、Java的特點和Java的發展簡史三個方面對Java進行了介紹,使得讀者在開始學習Java前對其有一個大概的認識。最後分享了幾本筆者認為適合初學者的書籍。 ...
  • #這個可以拿到這個django自帶的User的表,這個是django自己的用戶認證的表(創建超級用戶和普通用戶的表) 原理講解: 這個相當於在session裡面記錄一個session_idrequest.session['user_id']=user[0].id生成特殊的字元串特殊字元串生成key的 ...
  • 這是我們的XML文件,對其進行解析 結果如下 ...
  • Go的sort介面實現 ...
  • 在網上找了各種方法一直也沒配好打開jak下的lib文件夾發現並沒有tools.jar,後經查詢jdk-9後就沒有了上述.jar文件所以我的配置方法如下 ClASSPATH C:\jdk安裝目錄\lib C:\jre安裝目錄\lib Path C:\jdk安裝目錄\bin C:\jre安裝目錄\bin ...
  • CentOS安裝python-pip 在使用Python時,需要導入一些第三方工具包,一般情況下,鼓勵使用pip來安裝管理這些第三方的包, 這裡我們來看一下如何在CentOS 7.2上安裝Python-pip。 第一步,下載python-pip的tar包: # wget https://pypi.p ...
  • python中的多線程其實並不是真正的多線程,如果想要充分地使用多核CPU的資源,在python中大部分情況需要使用多進程。 進程與線程的使用有很多相似之處,有關線程方面的知識請參考https://www.cnblogs.com/sfencs-hcy/p/9721362.html multiproc ...
  • 1.python基礎語法要扎實。 2.多實際動手練習,多練習題,比如Python處理文件,統計文件里的字元數,列印前十。 3.熟練運用python周邊庫。 Web:(flask、Django) 爬蟲: (request、pyquery) 資料庫:(mysql) 前端:(html、css、Javasc ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...