北航c 期末考試複習

2021-09-25 04:51:10 字數 4106 閱讀 3146

筆者總結了北航計算機系c++考試的一些重點, 希望對以後複習的同學能有所幫助

迭代器,工程模式,觀察者模式必考

變數基本資料型別

void

bool

char

intfloat

double

wchar_t = short int

typedef newtype oritype;

sizeof 三種用法

sizeof(object)

sizeof object

sizeof(type)

變數名稱

名稱中只能用字母字元, 數字和下劃線(_)

第乙個字元不能為數字

區分大小寫字元

不能將c++關鍵字用作名稱

用兩個下劃線或下劃線和大寫字母大頭的名稱被保留編譯器給實現。 以乙個下劃線開頭的名稱被保留給實現。 陣列

初始化int counts[10] = {} 會把所有元素設定為0

初始化陣列時可以省略等號

double earnings[4]

字串陣列

sizeof會計算整個陣列的大小, 包括\0 但是strlen只計算可見字元的數量

cin.getline(arrstartm size) // 用來讀取一行

這個函式會讀取換行符, 並且從緩衝區中取走

cin.get 不會拿走換行符

string 類

string str1 = 「1231」;

或者striuing str = ;

getline(cin, str)

vector和array

用來替代一般陣列

vector為變長容器, array為定長

vector可以動態新增, array需要自己完成 函式

佔位符和預設引數

記憶體模型和命名空間

單獨編譯

標頭檔案中的內容

函式原型

使用#define 和const定義的符號常量

結構宣告

類宣告模板宣告

內聯函式

儲存持續性

自動在函式中和if while for塊中定義的變數, 在塊結束後自動釋放空間。

靜態儲存

static 儲存在bss(未初始化)或者data(初始化)段

執行緒儲存持續性

宣告週期和執行緒一樣長

動態儲存

new時開闢空間, delete時釋放空間

如果在子塊中定義了和父塊一樣的變數, 那麼在字塊中父塊的變數暫時被遮蔽

x = x + 1; // using x1

}

使用static可以把變數的作用域限制在當前檔案, 並且使用static可以覆蓋其他檔案中的變數

file1:

static int x1 = 2;

int x2 = 2;

file2:

extern static int x1; // invalid

extern int x2; // valid

儲存說明符

auto

register

static

extern

thread local

mutable

mutable可以打破const的限制

struct person ;

const person p = ;

p.x1 = 3; // invalid

p.x2 = 3; // valid 因為mutable打破了const的限制

new and delete

c++ 11中允許用new 來初始化陣列

int *arr = new int[5];

命名空間

命名空間可以限制變數, 函式, 類, 結構體的作用域。

using命令設定全域性命名空間。

類和物件

構造當乙個類把其他類當做自己的成員時, 在建立類的時候會優先呼叫成員的建構函式

只有類中沒有定義任何建構函式的時候, c++編譯器才會提供預設建構函式

class staock ;}

int main()

stock::stock() {} // 這個是預設建構函式

建構函式初始化列表

a (int x, int y) : this.x(x), this.y(y) 

c++建構函式不可以被繼承, 但是

如果子類沒有定義建構函式, 會自動呼叫父類的無引數構造方法

如果子類定義了自己的建構函式,並且沒有顯示呼叫父類建構函式, 會先呼叫父類的無引數構造方法, 再呼叫自己的構造方法

如果子類沒有顯示呼叫父類的構造方法, 會呼叫父類的無引數構造方法, 如果父類此時沒有無引數構造方法, 則會報錯。

如果子類呼叫父類的帶參方法, 需要初始化父類成員物件的方式。 許可權

public: 類內部, 外部, 友元函式, 子類都可訪問

private: 類內和友元可以訪問, 子類和外部不可訪問

protected: 類內, 友元和子類可以訪問,外部不可以訪問

預設函式

c++ 編譯時會給乙個類加入以下的預設函式

建構函式

拷貝函式

c++中三種情況會呼叫拷貝函式

函式傳入

函式返回

a b = a; 用另外乙個物件初始化新的物件

拷貝函式的宣告為[class name](const [class name]& x)

析構函式

賦值函式

呼叫時b = a

過載時a& operator = (const a& other)

取值函式

default呼叫預設

delete可以禁用某個函式

析構析構函式只有乙個, 不可以被過載

不可以被繼承

運算子過載

友元函式過載運算子的時候至少要有乙個引數, 一元乙個, 二元兩個

cast

dynamic_cast(p); 只有low是p的基類才可以, 否則返回null

const_cast 把乙個const pointer改為非const, 除了const volatile不同外, 表示式和轉換型別必須相同

static_cast可以high到low也可以low到high但不可以無關類

reinterpret_cast基本任何轉換

友元友元不可以被繼承

指標智慧型指標

auto_ptr<>

unique_ptr<> 只能有乙個指標指向物件

shared_ptr<>

引用引用左值

引用右值(函式返回值, 常量, 表示式)

當引用物件和被引用物件型別不匹配時, 會建立新變數, 相當於回到了按值傳遞

模板類模板中的所有成員函式都是模板函式。

模板是虛的函式, 如果沒有顯式呼叫<>, 編譯器會優先用非模板。

一些關鍵字

其他.a 靜態庫

.so 動態庫

.lib 靜態庫

.dll 動態庫

char *c = 「abc」 此時abc放在了常量區, 修改的話會導致程式崩潰

char c 放在了棧區域

char c = (char) malloc(sizeof(char) * k)

對於指標和陣列 c++用了不同方式處理

對於int** arr, 訪問兩次

對於int arr 永遠只訪問一次

陣列sizeof返回的是真實陣列的大小

指標sizeof放回的是8b

抽象類只能作為基類, 只能作為指標, 不可以例項化。

static和inline 函式不能為虛函式

私有繼承不可以隱式向上轉換

int &a = 2; 會編譯失敗, 因為2放在了常量區, 常量不可以左值引用

const int&a = 2; 編譯成功

int &a左值引用

int &&a右值引用

右值:無法用過變數名查詢到的值, 比如函式返回值等, = 號右邊的值

const int& 也可以延長右值的存在時間

靜態就是讓變數和

設計模式

C 期末考試複習筆記

c 語言是物件導向的程式語言,字尾名是.cs c 語言沒有指標c 語言完全擁有.net的自動 機制 c 語言不能用於硬體驅動程式的開發 net是乙個用於建立應用程式的平台 源 是乙個用於應用程式的核心,沒有源 則無法編譯乙個應用程式 工具欄是一些工具按鈕的組合 console.readline 的作...

C 期末考試複習資料三

習題一 一 填空題 1 物件導向的程式設計有四大特點,它們是抽象 封裝 2 類中的成員使用特定的關鍵字指定不同的訪問特性,其中 成員是提供給外部的介面,在類中和類外可見。3 protected成員的訪問許可權 派生類 訪問protected成員,派生類物件 訪問protected成員,本類的物件 訪...

C 期末考試複習資料四

一 填空題 1 如果類a繼承了類b,則類a稱為 類,類b稱為 類。2 在繼承機制下,當物件消亡時,編譯系統先執行 的析構函式,然後才執行 的析構函式。3 繼承發生在利用現有類派生新類時,其中 稱為基類,或 類 稱為派生類,或 類。4 在c 語言中,派生類繼承了基類的全部資料成員和除 之外的全部函式成...