c++八股文:c++面向對象

文章目錄

  • 1.c++面向對象三大特性
  • 2.c++的三個訪問修飾符
  • 3.多重繼承
  • 4.重載與重寫
  • 5.c++多態怎么實現
  • 6.成員函數/成員變量/靜態成員函數/靜態成員變量的區別
  • 7.構造函數和析構函數
  • 8.c++構造函數有幾種
  • 9.什么是虛函數什么是虛函數表
  • 10.虛函數和純虛函數的區別
  • 11.抽象類和純虛函數
  • 12.虛析構
  • 13.為什么要虛析構,為什么不能虛構造
  • 14.那些函數不能被聲明為虛函數
  • 15.淺拷貝和深拷貝的區別
  • 參考

1.c++面向對象三大特性

  • 面向對象:對象是指具體的某一個事物,這些事物的抽象就是類,類中包含數據(成員變量)和動作(成員方法)。
  • 面向對象的三大特性:
    • 封裝:將具體的實現過程和數據封裝成一個函數,只能通過接口進行訪問,降低耦合性。
    • 繼承:讓某種類型對象獲得另?個類型對象的屬性和?法。
    • 多態:多態就是不同繼承類的對象,對同一消息做出不同的響應,基類的指針指向或綁定到派生類的對象,使得基類指針呈現不同的表現方式。
      • 實現多態有兩種?式
        覆蓋(override): 是指?類重新定義?類的虛函數的做法
        重載(overload): 是指允許存在多個同名函數,?這些函數的參數表不同(或許參數個數不同,或許參數類型不同,或許兩者都不同)

2.c++的三個訪問修飾符

public 、 private 和 protected 。
這些修飾符決定了類中的成員對外部代碼的可?和訪問權限
  • public 修飾符?于指定類中的成員可以被類的外部代碼訪問。公有成員可以被類外部的任何代碼(包括類的實例)訪問。
  • private 修飾符?于指定類中的成員只能被類的內部代碼訪問。私有成員對外部代碼是不可?的,只有類內部的成員函數可以訪問私有成員。
  • protected 修飾符?于指定類中的成員可以被類的派?類訪問。受保護成員對外部代碼是不可?的,但可以在派?類中被訪問。

3.多重繼承

?個類可以從多個基類(?類)繼承屬性和?為。
在C++等?持多重繼承的語?中,
?個派?類可以同時擁有多個基類。

多重繼承可能引??些問題,如菱形繼承問題, ?如當?個類同時繼承了兩個擁有相同基類的類,?最終的派?類?同時繼承了這兩個類時, 可能導致?義性和代碼設計上的復雜性。為了解決這些問題,C++ 提供了虛繼承, 通過在繼承聲明中使? virtual 關鍵字,可以避免在派?類中?成多個基類的實例,從?解決了菱形繼承帶來的?義性。


4.重載與重寫

  • 重載:重載是指在同?作?域內,使?相同的函數名但具有不同的參數列表或類型,使得同?個函數名可以有多個版本。

  • 重寫:重寫是指派?類(?類)重新實現(覆蓋)基類(?類)中的虛函數,以提供特定于派?類的實現。重寫是?向對象編程中的多態性的?種體現,主要涉及基類和派?類之間的關系,?于實現運?時多態。

  • 區別

重寫重載
范圍重寫發生在不同的類之間(子類和父類之間)重載發生在同一個類的內部
參數重寫的函數的函數名、參數列表和返回值類型都需要和原函數相同,父類中被重寫的函數需要有 virtual 修飾重載的函數需要與原函數有相同的函數名、不同的參數列表,不關注函數的返回值類型
vritual關鍵字必須有可以有,可以沒有

5.c++多態怎么實現

  • 多態概念:多態就是不同繼承類的對象,對同一消息做出不同的響應,基類的指針指向或綁定到派生類的對象,使得基類指針呈現不同的表現方式。在基類的函數前加上 virtual 關鍵字,在派生類中重寫該函數,運行時將會根據對象的實際類型來調用相應的函數。如果對象類型是派生類,就調用派生類的函數;如果對象類型是基類,就調用基類的函數。
  • 多態實現原理:多態是通過虛函數實現的,虛函數的地址保存在虛函數表中,虛函數表的地址保存在含有虛函數的類的實例對象的內存空間中。
  • 簡單解釋:當基類的指針指向派生類的對象時,通過派生類的對象的虛表指針找到虛函數表(派生類的對象虛函數表),進而找到相應的虛函數進行調用。

6.成員函數/成員變量/靜態成員函數/靜態成員變量的區別

  • 成員函數:

    • 成員函數是屬于類的函數,它們可以訪問類的成員變量和其他成員函數。
    • 成員函數可以分為普通成員函數和靜態成員函數。
    • 普通成員函數使?對象調?,可以訪問對象的成員變量。
    • 普通成員函數的聲明和定義通常在類的內部,但定義時需要使?類名作為限定符。
  • 成員變量:

    • 成員變量是屬于類的變量,存儲在類的每個對象中。
    • 每個對象擁有?份成員變量的副本,它們在對象創建時分配,并在對象銷毀時釋放。
    • 成員變量的訪問權限可以是 public 、 private 或 protected 。
  • 靜態成員函數:

    • 靜態成員函數屬于類?不是對象,因此可以直接通過類名調?,?不需要創建類的實例。
    • 靜態成員函數不能直接訪問普通成員變量,因為它們沒有隱含的 this 指針。
    • 靜態成員函數的聲明和定義也通常在類的內部,但在定義時需要使?類名作為限定符。
  • 靜態成員變量:

    • 靜態成員變量是屬于類?不是對象的變量,它們在所有對象之間共享。
    • 靜態成員變量通常在類的聲明中進?聲明,但在類的定義外進?定義和初始化。
    • 靜態成員變量可以通過類名或對象訪問。

7.構造函數和析構函數

  • 構造函數:構造函數是在創建對象時?動調?的特殊成員函數。它的主要?的是初始化對象的成員變量,為對象分配資源,執?必要的初始化操作。
  • 析構函數:析構函數是在對象?命周期結束時?動調?的特殊成員函數。它的主要?的是釋放對象占?的資源、執?必要的清理操作。

8.c++構造函數有幾種

  • 默認構造:沒有任何參數的構造函數。如果?戶沒有為類定義構造函數,編譯器會?動?成?個默認構造
    函數。默認構造函數?于創建對象時的初始化,當?戶不提供初始化值時,編譯器將調?默認構造函數。
  • 帶參構造:接受?個或多個參數,?于在創建對象時傳遞初始化值。
  • 拷貝構造:?于通過已存在的對象創建?個新對象,新對象是原對象的副本。參數通常是對同類型對象的
    引?。
  • 委托構造函數:在?個構造函數中調?同類的另?個構造函數,減少代碼重復。

9.什么是虛函數什么是虛函數表

  • 虛函數:C++中的虛函數的作?主要是實現了多態的機制。虛函數允許在派?類中重新定義基類中定義的函數,使得通過基類指針或引?調?的函數在運?時根據實際對象類型來確定。這樣的機制被稱為動態綁定或運?時多態。
    在基類中,通過在函數聲明前?加上 virtual 關鍵字,可以將其聲明為虛函數。派?類可以重新定義虛函數,如果派?類不重新定義,則會使?基類中的實現。

  • 虛函數表:虛函數的實現通常依賴于?個被稱為虛函數表(虛表)的數據結構。每個類(包括抽象類)都有?個虛表,其中包含了該類的虛函數的地址。每個對象都包含?個指向其類的虛表的指針,這個指針被稱為虛指針(vptr)。
    當調??個虛函數時,編譯器會使?對象的虛指針查找虛表,并通過虛表中的函數地址來執?相應的虛函數。這就是為什么在運?時可以根據實際對象類型來確定調?哪個函數的原因。


10.虛函數和純虛函數的區別

  • 虛函數

    • 有實現: 虛函數有函數聲明和實現,即在基類中可以提供默認實現。
    • 可選實現: 派?類可以選擇是否覆蓋虛函數。如果派?類沒有提供實現,將使?基類的默認實現。
    • 允許實例化: 虛函數的類可以被實例化。即你可以創建?個虛函數的類的對象。
    • 調?靠對象類型決定: 在運?時,根據對象的實際類型來決定調?哪個版本的虛函數。
    • ? virtual 關鍵字聲明:虛函數使? virtual 關鍵字聲明,但不包含 = 0 。
  • 純虛函數:

    • 沒有實現: 純虛函數沒有函數體,只有函數聲明,即沒有提供默認的實現。
    • 強制覆蓋: 派?類必須提供純虛函數的具體實現,否則它們也會成為抽象類。
    • 禁?實例化: 包含純虛函數的類?法被實例化,只能?于派?其他類。
    • ? = 0 聲明: 純虛函數使? = 0 在函數聲明末尾進?聲明。
    • 為接?提供規范: 通過純虛函數,抽象類提供?種接?規范,要求派?類提供相關實現。

11.抽象類和純虛函數

  • 抽象類:是不能被實例化的類,它存在的主要?的是為了提供?個接?,供派?類繼承和實現。抽象類中可以包含普通的成員函數、數據成員和構造函數,但它必須包含?少?個純虛函數。即在聲明中使? virtual 關鍵字并賦予函數?個 = 0 的純虛函數。
  • 純虛函數:是在抽象類中聲明的虛函數,它沒有具體的實現,只有函數的聲明。通過在函數聲明的末尾使? = 0 ,可以將虛函數聲明為純虛函數。派?類必須實現抽象類中的純虛函數,否則它們也會成為抽象類。

12.虛析構

虛析構函數是?個帶有 virtual 關鍵字的析構函數。 主要作?是確保在通過基類指針刪除派?類對象時,能夠正確調?派?類的析構函數,從?釋放對象所占?的資源。
通常,如果?個類可能被繼承,且在其派?類中有可能使? delete 運算符來刪除通過基類指針指向的對象,那么該基類的析構函數應該聲明為虛析構函數。


13.為什么要虛析構,為什么不能虛構造

虛析構函數允許在運?時根據對象的實際類型調?正確的析構函數,從?實現多態性。如果基類的析構函數不是虛的,當通過基類指針刪除指向派?類對象的對象時,只會調?基類的析構函數,?不會調?派?類的析構函數。這可能導致派?類的資源未被正確釋放,造成內存泄漏。

構造函數在對象的創建階段被調?,對象的類型在構造函數中已經確定。因此,構造函數調?不涉及多態性,也就是說,在對象的構造期間?法實現動態綁定。虛構造函數沒有意義,因為對象的類型在構造過程中就已經確定,不需要動態地選擇構造函數。


14.那些函數不能被聲明為虛函數

常?的不不能聲明為虛函數的有:
普通函數(?成員函數),靜態成員函數,
內聯成員函數,構造函數,友元函數。

15.淺拷貝和深拷貝的區別

主要區別在于如何處理對象內部的動態分配的資源。
  • 深拷貝:該對象和原對象占用不同的內存空間,既拷貝存儲在棧空間中的內容,又拷貝存儲在堆空間中的內容。

  • 淺拷貝:該對象和原對象占用同一塊內存空間,僅拷貝類中位于棧空間中的內容。

參考

Leetcodec++面試突破

代碼隨想錄–最強八股文c++

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/716049.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/716049.shtml
英文地址,請注明出處:http://en.pswp.cn/news/716049.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

ABAP - SALV教程05 添加頁眉和頁腳

先看看效果叭CL_SALV_TABLE提供了SET_TOP_OF_LIST方法設置頁眉顯示和SET_TOP_OF_LIST_PRINT方法設置頁眉打印來實現添加頁眉的目的。CL_SALV_TABLE提供了SET_END_OF_LIST方法設置頁腳顯示和SET_END_OF_LIST_PRINT方法設置頁腳打印來實現添加頁腳的目的。這個四個方法的傳入參數…

Flutter異常上報及性能監控實現

1. 頁面異常監測 在Flutter中,通常用FlutterError監測Flutter框架拋出的異常,用runZonedGuarded監測應用中用戶代碼異常。 class AppGuarded {run(Widget app) {//1. 用FlutterError監測flutter框架拋出的異常FlutterError.onError (FlutterErrorDetail…

STM32F4 HAL庫串口死鎖問題調試記錄

文章目錄 STM32F4 HAL庫串口死鎖問題調試記錄調試方法結果分析解決方法一:方法二: STM32F4 HAL庫串口死鎖問題調試記錄 使用方法:通過串口DMA固定周期向外發送數據,同時開啟串口DMA接收用于接收其它板卡發來的數據。 問題&#x…

2024年,智慧文旅領航新時代,重塑旅行體驗的未來篇章!

隨著科技的飛速發展,智慧文旅正成為旅游行業的新寵,以其獨特的魅力和無限可能,引領著旅行體驗的全面升級。 2024年,智慧文旅火爆出圈,成為各界關注的焦點,為游客帶來了前所未有的震撼與享受。 智慧文旅&a…

290.【華為OD機試】連續出牌數量(深度優先搜索DFS—JavaPythonC++JS實現)

??點擊這里可直接跳轉到本專欄,可查閱頂置最新的華為OD機試寶典~ 本專欄所有題目均包含優質解題思路,高質量解題代碼(Java&Python&C++&JS分別實現),詳細代碼講解,助你深入學習,深度掌握! 文章目錄 一. 題目二.解題思路三.題解代碼Python題解代碼JAVA題解…

《猛獸派對》好玩嗎值得買嗎?蘋果電腦也能裝《猛獸派對》嗎?猛獸派對好友通行證 動物派對 猛獸對戰游戲

目錄 一、《猛獸派對》好玩嗎? 游戲玩法: 物理引擎: 關卡設計: 游戲特色: 評價: 榮譽: 二、蘋果電腦也能裝《猛獸派對》嗎? 第1步:下載并安裝CrossOver這款軟件…

C語言---文件操作(1)

1.文件的打開和關閉 fopen有2個參數,第一個是文件的名字,第二個是打開的模式(例如是讀文件還是寫文件) (1)該文件夾下面沒有data.txt文件,但是我執行了read操作,所以會顯示這樣的錯誤 (2&#…

『NLP學習筆記』圖解GPT3(How GPT3 Works-Visualizations and Animations)

圖解GPT3(How GPT3 Works-Visualizations and Animations) 文章目錄 一. GPT-1 vs GPT-2 vs GPT-3 vs GPT-3.5 vs GPT-4二. GPT32.1. 訓練動圖2.2. 預測動圖2.3. 代碼生成示例三. 參考文章原作者主頁:Jay Alammar原英文鏈接:How GPT3 Works - Visualizations and Animations …

ApplicationContext容器

ApplicationContext容器 1.概述 ApplicationContext接口代表了一個Spring容器,它主要負責實例化、配置和組裝bean。ApplicationContext接口間接繼承了BeanFactory接口,相較于BeanFactory一些基本的容器功能,ApplicationContext接口是在BeanFactory接口基礎上進行了擴展,增…

SQL 術語:Join 中的 Build 和 Probe 是什么意思?

博主歷時三年精心創作的《大數據平臺架構與原型實現:數據中臺建設實戰》一書現已由知名IT圖書品牌電子工業出版社博文視點出版發行,點擊《重磅推薦:建大數據平臺太難了!給我發個工程原型吧!》了解圖書詳情,…

如何在Vue中實現事件處理?

Vue是一種流行的JavaScript框架,廣泛應用于前端開發。在Vue中,事件處理是一個非常關鍵的概念,可以幫助我們實現用戶與頁面的交互,今天我們就來探討一下如何在Vue中實現事件處理。 首先,讓我們先了解一下在Vue中如何綁…

[pdf]《軟件方法》強化自測題業務建模需求分析共191頁,230題

潘加宇《軟件方法》強化自測題業務建模需求分析共191頁,230題,已上傳CSDN資源。 在完成書中自測題基礎上,進一步強化。 也可到以下地址下載: 資料http://www.umlchina.com/url/quizad.html 如果需要網盤提取碼:uml…

【Python】1. 背景知識

認識 Python 計算機基礎概念 什么是計算機? 很多老一輩的人, 管下面這個叫做計算機. 然鵝, 它只是 “計算器”, 和計算機是有很大區別的. 現在我們所說的計算機, 不光能進行算術運算, 還能進行邏輯判斷, 數據存儲, 網絡通信等等功能,。 以至于可以自動的完成非常復雜的工作…

代碼隨想錄day10(2)字符串:反轉字符串Ⅱ (leetcode541)

題目要求:給定一個字符串 s 和一個整數 k,從字符串開頭算起, 每計數至 2k 個字符,就反轉這 2k 個字符中的前 k 個字符。如果剩余字符少于 k 個,則將剩余字符全部反轉。如果剩余字符小于 2k 但大于或等于 k 個,則反轉前…

Spring與Spring Boot:簡化Java開發的革命性框架

Spring與Spring Boot:簡化Java開發的革命性框架 摘要:本文將深入探討Spring與Spring Boot兩個在Java開發領域具有重要地位的框架。我們將了解它們的核心概念、區別、聯系以及在實際項目中的應用。通過本文,您將更好地理解如何使用這兩個框架…

Zookeeper4:Java客戶端、應用場景以及實現、第三方客戶端curator工具包

文章目錄 Java連接Zookeeper服務端依賴代碼使用 應用場景統一命名服務統一配置管理統一集群管理服務器節點動態上下線理解實現模擬服務提供者【客戶端代碼】-注冊服務模擬服務消費者【客戶端代碼】-獲取服務信息進行請求消費 軟負載均衡分布式鎖理解實現 生產集群安裝N臺機器合…

Java中的Collection

Collection Collection 集合概述和使用 Collection集合概述 是單例集合的頂層接口,它表示一組對象,這些對象也稱為Collection的元素 JDK 不提供此接口的任何直接實現.它提供更具體的子接口(如Set和List)實現 創建Collection集合的對象 多態的方式 具體的實現類ArrayList C…

leetcode - 71. Simplify Path

Description Given a string path, which is an absolute path (starting with a slash ‘/’) to a file or directory in a Unix-style file system, convert it to the simplified canonical path. In a Unix-style file system, a period ‘.’ refers to the current di…

MATLAB環境下基于熵的聲納圖像分割算法

聲納圖像作為準確獲取水下信息的重要途徑之一,在國防、軍事、工程等方面發揮著巨大作用。然而,由于水聲信道的復雜多變和聲波本身的傳播損失,聲納圖像往往呈現出分辨率和對比度不高、噪聲干擾嚴重、目標輪廓模糊等特點。 聲納圖像的分割指的…

FCIS 2023網絡安全創新大會:洞察前沿技術,探索安全新境界(附大會核心PPT下載)

隨著信息技術的飛速發展,網絡安全問題日益凸顯,成為全球關注的焦點。作為網絡安全領域的重要盛會,FCIS 2023網絡安全創新大會如期而至,匯聚了全球網絡安全領域的頂尖專家、學者、企業家和政策制定者,共同探討網絡安全的…