清華大學C 2

2021-10-13 19:58:36 字數 3932 閱讀 3699

25、物件導向的程式特點:抽象、封裝、繼承、多型。物件是類的例項。

抽象是對同一類物件的共同屬性和行為進行概括,形成類。

資料抽象:類的屬性或狀態;

**抽象:類的行為或功能。

繼承:在已有類的基礎上,進行擴充套件形成新的類。

多型:同一名稱,不同的功能實現方式。減少程式中識別符號的個數。

26、類中如果沒有public等關鍵字修飾,則是private。類中定義函式體是內聯函式,必須簡單。類的建構函式就是初始化類成員的作用。即使類中沒有定義建構函式,定義物件時也會呼叫編譯器自動生成的預設建構函式,此時建構函式的引數列表為空,不為資料成員賦值,如果類內定義了資料成員的初始值,則用初始值,否則按基本資料型別生成的初始值,這是不確定的。如果定義了建構函式,還想用編譯器的預設建構函式,則假如類名是clock ,建構函式clock()=default.這樣就可以呼叫了。

26、委託建構函式的意思是同乙個類中有多個建構函式,只定義其中乙個,其他的呼叫這個定義的。這樣以後改乙個就可以改許多。

複製建構函式:用乙個類物件初始另乙個類物件時呼叫複製建構函式,如果不定義編譯器自定義乙個。形式類名

類中如果有兩個函式與類同名,則可能是建構函式和複製建構函式。

析構函式用來處理物件消除時的善後工作,如果不定義,編譯器產生乙個,其函式體為空。這是為了滿足語法需求。析構函式沒有參數列,沒有return語句。

29、類a中用類b,類b中用到類a,可以用前向引用宣告。

classb;

//前向引用宣告

class

aclass

b

但是前向引用宣告只能幫助在類a中,宣告被用的類b是個類,但並不能具體說明b 是什麼樣子,所以不能物件化b。比如:

classb;

class

aclass

b

這種方法不對,因為還不知道b佔多少位元組。

31、c++中結構體與類的唯一區別:類預設的訪問許可權是private,結構體預設的訪問許可權是public.結構體是特殊的類,當定義主要用來儲存資料,而沒有什麼函式,用結構體。

結構體在c++中用的不多。

c語言中的結構體不能定義函式,只能定義資料,c++中可以定義資料和函式。

32、聯合體union中包含的資料共用乙個資料空間,但同一時刻只有乙個資料有效。union所佔位元組數與資料中最大位元組數相同。

33、列舉enum和列舉類是不同的,兩個列舉類可以有相同的列舉值,但兩個普通的列舉不能有相同的列舉值。

28、類的組合,即類中的私有成員也是類的物件。

29、析構函式可以釋放記憶體。

類的繼承

1、即可以用組合,又可以用繼承時,選擇組合,因為組合的語法簡單。

2、繼承和派生是同一過程從不同的角度看。

保持已有類的特性而構造新類的過程是繼承,強調保持原有特性,盡量用原有的類。

在已有類的基礎上新增自己的特性而產生新類的過程是派生,強調產生新的。

3、派生類的構成:吸收基類成員;改造基類成員;新增新的成員。

4、派生類包含了全部基類中除了構造和析構函式之外的所有成員。

c++11規定可以用using 語句繼承基類建構函式。

改造:派生類宣告裡乙個和基類成員同名的新成員,派生的新成員隱藏或覆蓋裡外層同名成員。

5、不同繼承方式影響派生類成員對基類成員的訪問許可權;派生類物件對基類成員的訪問許可權。

多型

2、虛函式用virtual修飾。

告訴編譯器,這個函式先不做靜態繫結,而是後面執行要做動態繫結。用於繼承時用。虛函式屬於物件,而不屬於整個類。

#include

#include

using

namespace std;

classa;

void a::

show()

classb:

public a

;void b::

show()

void

fun(a *p)

intmain

(int argc,

char

**ar**)

//輸出:a_show() b_show()

含有純虛函式的類稱為抽象類,它不能生成物件。例如,動物作為乙個基類可以派生出老虎、孔雀等子類,但動物本身生成物件明顯不合常理。純虛函式最顯著的特徵是:它們必須在繼承類中重新宣告函式(不要後面的=0,否則該派生類也不能例項化),而且它們在抽象類中往往沒有定義。定義純虛函式的目的在於,使派生類僅僅只是繼承函式的介面。

共享與保護

35、

int i;

main()

不可見,全域性作用域

}

36、類的靜態變數用static修飾,屬於整個類,而並不屬於該類的物件。

class

point

}int point :: count=0;

//靜態資料成員的初始化和定義在類的外面。

靜態資料一般用靜態函式處理。

靜態函式:static 返回值 函式名(){}.

非靜態函式是利用物件去呼叫它,物件.函式名的方式,所以非靜態函式知道是哪個物件呼叫了它,能夠處理那個物件的成員變數。

靜態函式一般不處理類的非靜態成員,如果一定要處理,要通過物件訪問,這樣才能知道是哪個物件的成員,把物件當作引數傳給它。

class

point

point

(point &p)

~point()

intgetx()

intgety()

static

void

showcount()

private

:int x,y;

static

int count;

}int

main()

37、友元是c++提供的一種破壞資料封裝和資料隱藏的機制;

通過將乙個模組宣告為另乙個模組的友元,乙個模組能夠引用到另乙個模組中本是被隱藏的資訊;

增加靈活性;

為確保資料的完整性,及資料封裝與隱藏,慎用友元。

class

point

friend

float

dist

(point &a, point &b)

;//將類外的函式宣告為該類的友元,函式可以訪問類中的私有成員。傳引用成本低

private

:int x,y;};

float

dist

(point &a,point &b)

intmain()

class

aprivate

:int x;};

classb;

void b::

set(

int i)

void b::

display()

友元關係是單向的,a是b的友元,b不一定是a的友元。

39、靜態生存期與程式的執行期間相同,在函式內部宣告靜態生存期物件用static修飾,值不改變,除非賦新值。

動態生存期起始與宣告點,結束作用域結束。沒有用static宣告的物件。

模板

1、多個過載函式冗餘,或者修改乙個,其他不改,演算法不一致。

2、函式模板的模板引數列表內容可以包含類class,但涉及物件之間的相關運算時,需要過載運算子。

3、群體

1、多個資料元素組成的集合體。群體可以分為線性群體和非線性群體。線性群體中的元素按位置排序,非線性群體不用位置順序標識元素。

陣列

蓋茨清華大學演講

尊敬的顧校長,清華大學的老師 同學們 獲得清華大學這所世界一流大學的榮譽博士學位,讓我感到非常榮幸。清華是所有著百年歷史的名校,這裡誕生了很多傑出的科學家 商業和政治領袖。我上一次造訪貴校是在1997年。當時,貴校學生的才華 熱情和創造性給我留下了很深的印象。之後,我決定在中國設立微軟研究院。在沈向...

清華大學 自學能力

一 永遠不要說你已經盡力了 我在高中時體育特別差,跑1000公尺都很要命,從來都是不及格。到了清華之後,第一節體育課,老師告訴我們每年要測3000公尺長跑,跑不過不許畢業,取消推研資格。怎麼辦?於是每天晚上10 30,我們的自習教室關門,操場上的人就多起來了。跑半個小時再回寢室繼續學習,練了乙個學期...

查詢學生資訊 清華大學

牛客網題目鏈結 排序題。先儲存再查詢 include include include include include include include include include include using namespace std const int n 1005 typedef pair i...