1. 程式人生 > >C/C++軟體研發/軟體測試常見筆試題一

C/C++軟體研發/軟體測試常見筆試題一

一. 建構函式?解構函式?虛擬函式?過載?排序演算法?陣列與連結串列?

建構函式 ,主要用來在建立物件時初始化物件, 即為物件成員變數賦初始值,總與new運算子一起使用在建立物件的語句中。一個類可以有多個建構函式 ,可根據其引數個數的不同或引數型別的不同來區分它們 即建構函式的過載

1.)建構函式的命名必須和類名完全相同。在java中普通函式可以和建構函式同名,但是必須帶有返回值;

2.)建構函式的功能主要用於在類的物件建立時定義初始化的狀態。它沒有返回值,也不能用void來修飾;

3.)建構函式不能被直接呼叫,必須通過new運算子在建立物件時才會自動呼叫;一般的方法是在程式執行到它的時候被呼叫的;

4.)建構函式有回滾的效果,建構函式丟擲異常時,構造的是一個不完整物件,會回滾,將此不完整物件的成員釋放(c++);

5.)當一個類只定義了私有的建構函式,將無法通過new關鍵字來建立其物件;

6).它不可以過載;

class <類名>

{public:

<類名>(引數表);//...(還可以宣告其它成員函式)};

<類名>::<函式名>(引數表)

{//函式體}

如以下定義是合法的:

class T{

public:

T(int a=0){ i=a; }//建構函式允許直接寫在類定義內,也允許有引數表。

private:

int i;};

解構函式(destructor) :與建構函式相反,當物件結束其生命週期,如物件所在的函式已呼叫完畢時,系統自動執行解構函式。解構函式往往用來做“清理善後” 的工作(例如在建立物件時用new開闢了一片記憶體空間,delete會自動呼叫解構函式後釋放記憶體)。解構函式的名稱與類的名稱是完全相同的,只是在前面加了個波浪號(~)作為字首,它不會返回任何值,也不能帶有任何引數。解構函式有助於在跳出程式(比如關閉檔案、釋放記憶體等)前釋放資源。

C++當中的解構函式格式如下:

1

2

3

4

5

6

7

8

9

class

 <類名>

{

public:

~<類名>();

};

<類名>::~<類名>()

{

//函式體

};

當程式中沒有解構函式時,系統會自動生成以下解構函式:

<類名>::~<類名>(){},即不執行任何操作。

虛擬函式:在某基類中宣告為 virtual 並在一個或多個派生類中被重新定義的成員函式,用法格式為:virtual 函式返回型別 函式名(引數表) {函式體};實現多型性。簡單地說,那些被virtual關鍵字修飾的成員函式,就是虛擬函式。虛擬函式的作用,用專業術語來解釋就是實現多型性(Polymorphism),多型性是將介面與實現進行分離;用形象的語言來解釋就是實現以共同的方法,但因個體差異,而採用不同的策略。

二  基類

相關關係說明

1.基類,父類,超類是指被繼承的類,派生類,子類是指繼承於基類的類.

2.在C++中使用:冒號表示繼承,如class A:public B;表示派生類A從基類B繼承而來

3.派生類包含基類的所有成員,而且還包括自已特有的成員,派生類和派生類物件訪問基類中的成員就像訪問自已的成員一樣,可以直接使用,不需加任何操作符,但派生類仍然無法訪問基類中的私有成員.

4.在C++中派生類可以同時從多個基類繼承,Java不充許這種多重繼承,當繼承多個基類時,使用逗號將基類隔開.

5.基類訪問控制符,class A:public B 基類以公有方式被繼承,A:private B 基類以私有方式被繼承,A:protected B 基類以受保護方式被繼承,如果沒有訪問控制符則預設為私有繼承。

6.protected 受保護的訪問許可權;使用protected 保護許可權表明這個成員是私有的,但在派生類中可以訪問基類中的受保護成員。派生類的物件就不能訪問受保護的成員了。

7.如果基類以public 公有方式被繼承,則基類的所有公有成員都會成為派生類的公有成員.受保護的基類成員成為派生類的受保護成員.

8.如果基類以private 私有被繼承,則基類的所有公有成員都會成為派生類的私有成員.基類的受保護成員成為派生類的私有成員.

9.如果基類以protected 受保護方式被繼承,那麼基類的所有公有和受保護成員都會變成派生類的受保護成員。

10.不管基類以何種方式被繼承,基類的私有成員,仍然保有其私有性,被派生的子類不能訪問基類的私有成員