筆者總結了北航計算機系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 語言中,派生類繼承了基類的全部資料成員和除 之外的全部函式成...