1. 程式人生 > >10.18資料結構的相關總結

10.18資料結構的相關總結

關於c++(2016-)

預設值的定義問題

下列函式引數預設值定義錯誤的是( )。

A.f(int x,int y=O) B.fun(int x=100) C.f(int x=0,int y) D.fun(int x=f())(函式f()已經定義) Answer:C

允許在函式的說明或定義時給一個或多個引數指定預設值。引數預設值必須從右向左定義,即在一個指定了預設值的引數的右邊,不能出現沒有指定預設值的引數。

關於函式過載的總結

函式過載,有兩個要求: 1、函式名一致 2、引數表不一致(包括引數數量和引數型別)

建構函式可以被過載,因為建構函式可以有多個且可以帶引數。 解構函式不可以被過載,因為解構函式只能有一個,且不能帶引數。

建構函式呼叫幾次的問題

*假定myclass為一類,執行myclass a[3],p[2];語句時會自動呼叫該類建構函式3次

宣告指標時不執行建構函式 p[0]=new myclass;時才執行建構函式 簡單理解 只有在例項化物件的時候才會呼叫類的建構函式

關於拷貝建構函式

拷貝建構函式以自己的一個同類物件為引數,生成一個新的物件 所以,任何用自身同類物件生成新物件時,都會呼叫拷貝建構函式。

(如果沒寫拷貝建構函式,系統會有一個預設的(和建構函式 解構函式類似)。這個預設的建構函式就是簡單的把各個屬性都對應複製一遍。)

拷貝建構函式的名稱必須與類名稱一致,函式的形式引數是本型別的一個引用變數,且必須是引用。 類似Test(Test &c_t)

CExample(const CExample& C) ? A(const A&a)形參使用const修飾,表示在賦值建構函式中不能改變a的值。這裡用const的意義就是防止對a進行修改。

關於c++(2014)

關於類的成員函式

成員函式特徵:可以訪問類中任何成員。此外,成員函式可以像全域性函式一樣:

  1. 過載
  2. 設定為行內函數
  3. 設定具有預設值。

行內函數就是編譯時函式程式碼直接嵌入函式呼叫點,以空間換時間,提高程式執行效率;外聯函式是一般意義的函式或子程式(獨立的可呼叫程式塊)。 在類體中定義的成員函式就是行內函數;在類體外定義的成員函式是外聯函式,但可以用inline關鍵詞定義為行內函數。

c++類會預設生成6個成員函式:

  • 建構函式
  • 拷貝建構函式
  • 解構函式
  • 賦值操作符過載
  • 取地址操作符過載
  • const修飾的取地址操作符過載

成員函式都可以設定預設引數 x 比如解構函式屬於成員函式但是它是沒有引數的 所以不符合描述

&*pa的表示 如果有以下定義:int a, *pa = &a;,則 &*pa表示的是

pa 如果有以下定義:int a, *pa = &a;,則 &*pa表示的是 pa

分析: *pa 表示pa所指向的目標變數即a,也就是說此時這兩者是等價的 pa因為是個變數,在定義中初始化時向這個變數中存入了a的地址,所以pa表示a的地址 &pa表示變數pa的地址。我們可以定義一個二級指標指向這個變數pa,具體方法是:int **p; p = &pa;

*pa=&a與pa=&a之間的疑惑,

*pa=&a 是把a的地址值 給地址(指標)pa裡的資料賦值. pa=&a是把a的地址值賦值給pa,使得指標pa(指向)a的地址 可以理解為 *pa=&a,是 值

定義int b[3][4],*q[3]; 下列賦值表示式中_______是正確的.

(A) q=b (B) q=*b © *q=b+1 (D) *q=&b[1][2]

指標q 儲存的是陣列b的地址 q 是訪問地址裡的資料 陣列名代表地址 b+1是b[1]的地址 c的正確表示式如下 q=b+1 或q=b[1]

c++程式設計,為什麼自身類的物件不可以作為該類的成員,自身類的指標或引用卻可以?

因為如果類包含自身類的物件,存在無限初始化的問題。 構造一個類的物件是,先構造成員變數,然後再呼叫自身的建構函式,如果類包含自身的的物件,那麼在呼叫建構函式之前,需要先構造自身類的物件。而構造自身類的物件時,又得先構造自身的物件,然後呼叫其建構函式……

不能將友元說明為虛擬函式,但虛擬函式可以是另一個類的友元。

因為在一個類裡宣告友元時 由於友元不是自己的成員函式 自然在自己的類裡不能把它宣告為虛擬函式 但是在友元本身可以是虛擬函式 注意 友元是另外一個類的成員函式(在那個類裡 它可以定義為虛擬函式) 這個類將它宣告為自己的友元,只是讓它可以存取自己的私有變數