C 學習筆記 9

2021-09-05 09:57:08 字數 1290 閱讀 9967

static 在c語言裡面

1: 如果是靜態的全域性變數,就意味著這個變數只在這個.c檔案裡有效

2: 靜態的本地變數具有持久儲存的作用, static的本地變數就是全域性變數,它就是放在全域性變數那個地方的

3: 靜態的函式意味著只能在這個.c裡面訪問,在.c以外的是不能訪問的

在c++

static 的成員變數被所有的物件共享

靜態的成員函式被所有的物件共享,它只能訪問靜態的變數或者靜態的函式

如果乙個物件是靜態的,那麼它的構造是只發生一次的

全域性變數的建構函式執行在main函式之前,從此main不再是第乙個被呼叫的函式了

main函式只是乙個函式,程式在執行的時候先執行的是編譯器新增的啟動**,等一切準備工作做好了之後才去執行main函式的第一條語句

程式結束的時候析構靜態變數

如果有多個.cpp檔案,多個全域性變數,誰先初始化,是沒有規定的。即使是同乙個編譯器,這次編譯和下次編譯也可能會有不同的結果

跨檔案的初始化順序是沒有的

如果跨檔案的全域性變數有相互依賴的關係,解決的辦法是

1:不這樣幹

2:如果邏輯上允許的話,放到乙個地方去

在乙個類裡面,static的成員變數被不依賴於某個物件而存在,被所有的物件所共有那乙個

如果你寫了乙個 static的成員變數,一定要在某個.cpp 檔案裡寫上 這裡有乙個 int a::i; 這樣的格式a為對應的類,int為型別名,i為成員變數名

類裡面對成員變數的定義只是乙個宣告

乙個類可以只有.h,沒有.cpp, 把所有的函式都做成inline

但是如果這個類裡面有靜態的成員變數,那麼就一定要有乙個對應的.cpp檔案

靜態成員變數只能在他自己定義的地方被初始化

建構函式初始化列表只能對非靜態成員做初始化

通過this指標,可以訪問到所有的靜態和非靜態成員

靜態成員函式不能訪問非靜態成員變數

靜態的成員函式只能呼叫靜態的成員函式和訪問靜態的成員變數

靜態的成員函式可以再這個類沒有物件的時候就被呼叫,所以他沒有this

learning record code:

#include using namespace std;

class a

void set(int i)

void print()

static void say(int ii)

};int a::i = 20; // 定義的地方,可以初始化

int main()

c 學習筆記(9)

拷貝構造函式呼叫時機 1.使用乙個已經建立完畢的物件來初始化乙個新物件 2.值傳遞的方式給函式引數傳值 3.以值方式返回區域性物件 class person person person int age person const person p void test1 void test2 void ...

C 學習筆記9 模板

當編譯器遇到乙個模板定義時,它並不生成 只有當我們例項化出模板的乙個特定版本時,編譯器才會生成 普通的函式,函式的宣告和定義我們可以放在不同檔案中。對於模板則不同,為了生成乙個例項化版本,編譯器需要掌握函式模板或類模板成員函式的定義。因此,模板的標頭檔案通常既有包括宣告也包括定義。template ...

C語言學習筆記9

從程式流程的角度來看,程式可以分為三種基本結構,即順序結構 分支結構 迴圈結構。這三種基本結構可以組成所有的各種複雜程式。c語言程式設計教程 中會這樣來區分這結構,下面來說說分支結構程式和迴圈結構程式 1 分支結構程式 關係運算子和表示式 在程式中經常需要比較兩個量的大小關係,以決定程式下一步的工作...