1. 程式人生 > >c++——基本概念

c++——基本概念

類庫 如果 str stat 才有 表示 參數 自動調用 運算符重載

  1. 如何理解c/c++中的指針?每種編程語言都使用指針,但Java、c#等將指針隱藏,而c/c++將指針暴露給了用戶(程序員)https://www.cnblogs.com/gxcdream/p/4805612.html
  2. 如何理解符號表?記錄變量名及變量對應的地址。在編譯時生成,生成後不可改
  3. c++中的內存有哪幾種?如何分配?存儲什麽內容?靜態存儲區、棧存儲區、堆存儲區。靜態存儲區在編譯時分配,在程序的整個運行期間都存在,存儲全局變量、static變量;棧區函數執行時分配,在函數運行期間存在,存儲函數中的臨時變量;堆區由程序員自己分配,自己刪除
  4. 棧內存和堆內存的區別?棧內存保存堆內存的地址,堆內存保存真正數據
  5. 內存中供用戶使用的存儲空間劃分為哪幾部分,分別存儲什麽類型的變量?程序區、靜態存儲區(全局變量)、動態存儲區(函數形參、自動變量等)
  6. 成員變量(Fields)、參數(parameter)和本地變量(Local Variable)的區別?參數和本地變量相同,存儲在棧中。成員變量在類中定義,本地變量在函數中定義。作用域:成員變量在類的所有函數中都可直接用,本地變量在本函數中使用;生命周期:成員變量在對象的生成期中永遠存在,本地變量隨函數存在。(成員變量在類的每個對象中,一般為私有,不能通過.訪問)
  7. 變量和函數在聲明時的兩個屬性是什麽?數據類型(整型、字符型),數據存儲類別(在內存中存儲方式,分靜態、動態兩類,根據存儲類別可知變量的作用域與生存期)
  8. 變量根據生存周期可分為哪兩類?靜態(程序運行期間由系統分配固定的存儲空間)、動態(程序運行期間根據需要動態分配存儲空間)
  9. 初始化和賦值的區別?初始化指在創建變量時賦予其一個初值,賦值指把對象的當前值擦除,以一個新值代替之
  10. .h文件和.cpp文件的區別?https://zhidao.baidu.com/question/554429813.html
  11. c++中作用域如何分隔?以“{}”分隔
  12. ::是什麽意思?域解析符(也稱作用域運算符或作用域限定符),用來連接類名和函數名,指明當前函數屬於哪個類
  13. ->的含義?取成員,通過結構體(類)指針取得結構體(類)的成員(可讀成“的”)
  14. &和*的含義?由上下文決定。在聲明語句中,&為引用,*為指針;在表達式中,&為取地址,*為解引用
  15. 介紹c++中兩種主要的復合類型及其區別?引用、指針。引用與變量綁定,不是對象(一旦綁定,無法改變),必須初始化(引用是某塊內存的別名,程序不會為引用分配內存);指針指向,是對象(允許賦值、拷貝),可以不初始化(指針指向一塊內存,其內容是所指內存的地址)。
  16. 指針的使用有何註意事項?未經初始化的指針會引發錯誤,盡量等定義了對象後再定義指向它的指針
  17. 如何理解c++的分離式編譯機制?將變量的聲明定義分離的機制。聲明規定了變量的類型和名字,即使一個名字為程序所知,一個文件如果想使用別處定義的名字則必須包含對那個名字的聲明。定義則負責創建與名字關聯的實體,以及申請存儲空間。將聲明和定義分離,可方便將程序分為許多文件,並在文件中共享代碼
  18. int (*p)(int,int)與int *p(int,int)的區別?前者為函數指針,p是指向函數入口地址的指針變量(地址);後者為指針函數,*表示函數p的返回值是指向整型變量的指針
  19. int (*p)[4]與int *p[4]的區別?前者為數組指針,p為指向一維數組的指針變量(地址);後者為指針數組,*代表數組p的每個元素均為指向整型變量的指針
  20. int p[4]與int (*p)[4]中p的區別?前者中p為數組首元素地址;後者中*p為數組首元素地址,p為雙重指針
  21. 數組名和函數名各代表什麽?數組名代表數組首元素的地址,函數名代表函數的入口地址
  22. 什麽是虛函數?通過指針調用派生類的成員函數,實現多態
  23. 句柄和指針的區別?https://blog.csdn.net/perfectguyipeng/article/details/71189822
  24. 函數的參數傳遞有哪兩種機制?引用傳遞(passed by reference)、值傳遞(passed by value)。形參為引用類型時,形參
  25. 什麽是函數模板?合並名字相同,參數不同的函數,方便實現函數重載和泛型
  26. 程序錯誤有哪幾類,如何避免?語法錯誤(編譯)、邏輯錯誤(調試)、運行錯誤(異常機制)
  27. 創建對象有哪兩種機制,有什麽區別?https://www.cnblogs.com/techyc/p/3257575.html
  28. 對象的創建包含哪兩個階段?1、分配內存;2、初始化(調用構造函數)
  29. 多態的實現方式:函數重載、運算符重載、虛函數。前兩種編譯時實現,後一種在運行時實現
  30. 什麽是宏?一種替換機制(批處理),在預處理階段展開,程序隨之變長
  31. C/C++的預處理功能有哪幾種?宏定義,文件包含,條件編譯(滿足條件了才編譯)
  32. 什麽是構造函數?用於對象初始化,創建對象時自動調用,沒有返回值
  33. 什麽是析構函數?與構造函數相對,銷毀對象時系統自動調用。進行清理工作,例如釋放分配的內存、關閉打開的文件等。沒有參數和返回值
  34. 什麽是內聯函數,如何聲明?為了消除函數調用的時空開銷,C++ 提供一種提高效率的方法,即在編譯時將函數調用處用函數體替換,類似於C語言中的宏展開。可將短小的、頻繁調用的函數聲明為內聯函數。聲明函數時加關鍵字inline
  35. 什麽是局部變量和外部變量,如何聲明?static,extern
  36. 什麽是內部函數和外部函數,如何聲明?二者區別:能否被其他文件調用。內部函數:只能被本文件中的其他函數所調用,即作用域僅局限於所在文件。通過static聲明;外部函數:可被其他文件調用。通過extern聲明(默認)
  37. 函數的聲明和定義在語法上如何區分?聲明沒有{}
  38. extern在c++中有什麽用法?(https://www.cnblogs.com/broglie/p/5524932.html)為方便分離式編譯,如果想聲明一個變量而非定義它,就在變量名前添加extern關鍵字。將一個變量聲明為extern就表示承諾在程序的其他位置有該變量的一個非extern定義。一個給定的變量可能有多個extern聲明,但必須只有一個定義
  39. struct和class的區別?https://www.cnblogs.com/ccsccs/articles/4025215.html
  40. include" "和< >的區別?前者在.cpp所在目錄找,後者在系統目錄找
  41. 類的組成?成員變量和成員函數,類不是實體,只有實體才有變量,變量是屬於對象的,不屬於類,函數是屬於類的,不屬於對象。所有類的對象用到的函數是同一個,而類的變量只有創建對象時才會產生。當不同的對象調用同一個函數的時候,編譯器可以知道是哪個對象在調用它,並把變量與之關聯上(通過this實現)
  42. 創建對象的兩種方式?有什麽區別?在棧上創建和在堆上創建。在棧上創建對象使用“類名 對象名”創建,對象在離開作用域後自動刪除,使用"."訪問對象的的方法;在堆上創建的對象使用“類名 對象地址 = new 類名”創建,對象需使用delete手動刪除,使用"->"訪問對象的方法 https://www.cnblogs.com/techyc/p/3257575.html
  43. 什麽是對象?一塊能存儲數據並具有某種類型的內存空間
  44. 基本內置類型包括哪幾類?算數類型(又分為字符、整型、布爾、浮點)和空類型
  45. 聲明語句的組成?基本數據類型+聲明符
  46. const的用途?修飾變量,以說明它是不可變的
  47. 函數由哪幾部分構成?返回類型、函數名字、形參列表、函數體
  48. 什麽是函數重載?同一作用域內的幾個函數名字相同但形參列表不同
  49. VS、VC、MFC是什麽?VS >VC >MFC 微軟基礎類庫(Microsoft Foundation Classes)
  50. 什麽是MSDN?微軟開發者網絡(Microsoft Developer Network),VS的幫助文檔
  51. 什麽是GDI?圖形裝置界面(Graphic Device Interface)
  52. 如何理解設備描述表?https://blog.csdn.net/wenzhou1219/article/details/22325247

c++——基本概念