C 常見的基礎概念

2021-09-08 06:49:19 字數 2857 閱讀 8740

1. c++物件導向特徵

封裝:指隱藏物件的屬性和實現細節,僅對外提供公共訪問方式;

繼承:可以使子類具有父類的屬性和方法或者重新定義、追加新的屬性和方法,是**擴充套件的一種方式;繼承包含實現繼承、介面繼承及可視繼承。其中,實現繼承是使用父類的屬性和方法;介面繼承是基於父類的屬性和方法,子類繼承父類的方法並進行重新實現的過程;可視繼承是指子窗體(類)使用父窗體(類)的外觀和實現**的能力。

多型:多型分為編譯時多型和執行時多型。編譯時多型實現方式是函式過載和泛型程式設計,執行時多型主要是通過虛函式來實現的。

虛函式:虛函式是類的非靜態成員函式,訪問許可權一般為public,函式宣告時,在函式返回之前加virtural關鍵字,虛函式定義時不需要加virtural關鍵字。父類定義的虛函式,子類在繼承時,需要對父類的虛函式進行重新定義和實現。用父類的指標指向子類的例項,然後通過父類的指標可以指向實際子類的成員函式。

純虛函式:純虛函式指在虛函式宣告時,在函式尾部加「=0」。純虛函式沒有函式定義,它的子類需要繼承所有父類的純虛函式並給出定義。純虛函式的作用就是給所有的子類提供統一的外部介面。

抽象類:指含有純虛函式的類是抽象類,該類不能建立物件,但可以宣告指標或引用。

2. 子類析構時呼叫父類的析構函式嗎?

子類在析構時先呼叫派生類的析構函式,然後呼叫基類的析構函式。也就是說基類析構呼叫時,派生類的資料已經全部銷毀了。

3. 引用的概念?引用在使用時需要注意哪些?引用作為函式引數的好處?

引用就是給變數起別名。對引用的操作與對其它變數的操作時一樣的;

宣告乙個引用時,切記需要對引用進行初始化。引用宣告完畢後,該變數有兩個名稱,即原目標變數名和引用名,引用名不能再次作為其它變數名的別名;

引用名作為函式引數的效果和指標是一樣的,但是引用名作為函式引數作用可以歸納為以下兩種:

<1> 對被調函式引數的使用,實際上是對主調函式中實參的使用;

<2> 引用名作為函式引數時,不產生實參的副本,它是直接對實參操作的。相反,當函式引數是值傳遞時,需要給形參分配記憶體空間,即在記憶體中產生實參的副本;當函式引數是物件時,還需要呼叫賦值建構函式。

4. 將引用作為函式返回值型別的格式、好處及需要遵守的規則?

格式:型別識別符號 &函式名(形參列表及型別說明)

好處:在記憶體中不產生被返回值的副本

規則:不能返回區域性變數的引用;

不能返回函式內部new分配的記憶體的引用;

可以返回類成員的引用,但注意加const。

5. 過載、重寫(覆蓋)及隱藏的區別

1> 過載與重寫的區別:

- 範圍

過載發生在同類中,而重寫發生在不同的類中;

- 引數列表

過載引數列表一定不同,重寫的引數列表一定相同;

- 有無virtural關鍵字

重寫的基類必須要加virtural關鍵字,但是過載可加可不加。

2> 隱藏與過載和重寫的區別

與過載的範圍不同:隱藏發生在不同的類之間;

隱藏函式的引數列表可以相同,也可以不同,但是函式名稱必須相同;當引數不同時,無論是否加virtural關鍵字,基類的函式都是被隱藏,不是被重寫。

6. 記憶體分配方式

- 從靜態儲存區域分配。

內存在程式編譯時已經分配好,這塊內存在程式的整個執行期間都有效。例如全域性變數、static靜態變數。

- 從棧上分配。

- 從堆上分配(動態分配記憶體)

7. 指標陣列與陣列指標

指標陣列:是乙個陣列,用來存放指標的陣列。乙個陣列中存放的同型別的指標。例如int a[10];

陣列指標:是乙個指標,指向陣列的指標。例如 int (a)[10];

8. const的用法

- 用於定義變數

<1> 只有乙個const,位於的左側,表示指標所指資料是常量,不能通過解引用來修改資料。指標本身是變數,可以指向其它的記憶體位址;例如, const int a = 10;

<2> 只有乙個const,位於的右側,表示指標本身是常量,不能指向其它的記憶體位址。指標所指的資料可以修改。例如,int const a = 10;

<3> 有兩個const,分別位於*的左右兩側,指標和指標所指的資料都不能修改。

- 修飾函式的引數

<1> const修飾輸入引數為「指標傳遞」時,那麼新增const可以防止引數值被修改;

<2> 對於非內部資料型別的輸入引數,應該將「值傳遞」修改為「const 引用傳遞」,目的是為了提高程式的效率;例如,將void func(a a); 修改為 void func(const a &a),避免產生臨時物件;

- 修飾函式的返回值

<1> 如果給「指標傳遞」方式的函式返回值加const修飾,那麼函式的返回值的內容不能被修改,該返回值只能賦值給加const的同型別指標;

<2> 如果函式引數採用「值傳遞」方式,由於函式會把返回值複製給外部臨時儲存單元中,加const修飾毫無意義。

- 修飾函式的定義體

const修飾類的成員函式,目的是防止成員函式修改被呼叫物件的值,如果我們不想修改乙個呼叫物件的值,所有的成員函式都應當宣告為const成員函式。

9. 虛函式的實現原理

C 基礎 C 的 常見概念簡述

在上篇文章中,你跟著我寫了乙個helloworld,本篇中,我們來談談一些c 程式中的小概念 1 c 程式結構 乙個 c 程式主要包括以下部分 1 using system 2 3 namespace helloworld 4 12 13 程式的第1行 using system using 關鍵字用...

C 基礎 C 的 常見概念簡述

在上篇文章中,你跟著我寫了乙個helloworld,本篇中,我們來談談一些c 程式中的小概念 1 c 程式結構 乙個 c 程式主要包括以下部分 1 using system 2 3 namespace helloworld 4 12 13 程式的第1行 using system using 關鍵字用...

C 基礎概念

1 override與過載的區別 override修飾符,覆寫乙個基類中的方法.過載則是將將同名方法重新寫過,達到同名的函式實現不同的功能.從而實現了乙個方法有不同的版 本.override與過載的本質區別是,加入了override的修飾符的方法,此方法始終只有乙個被你使用的方法.這個區別就好像 o...