C 快速入門1 基礎知識

2021-10-17 03:32:56 字數 2827 閱讀 6027

this是個特殊指標,在class裡面指向當前物件,例如。

class person

};

用於指定當前函式屬於某個類,例如setage函式屬於person類的乙個方法。

用於指定呼叫的函式是來自哪個命名空間,例如呼叫的是命名空間a裡面的printversion函式。

using a::person; 宣告使用命名空間a裡面的person類,不宣告的話在使用類之前要加命名空間。

using a::printversion; 匯入命名空間a裡面的printversion函式,不宣告的話在呼叫函前面要加命名空間。

直接using namespace a; 一次性匯入命名空間a涉及的類和函式。

需要包含標頭檔案iostream:#include ,不需要加.h,引用標準命名空間std。cout使用方法:cout<

uint8_t i = 100;

cout<

建構函式需要public屬性。

指標方式定義類變數:person *per = new person;或者person *per = new person();這兩種方式都是可以的,都會呼叫無參的建構函式。刪除乙個類:delete per。

建構函式傳入預設引數,如person(int age,char *name = 「zhangsan」)。

一旦定義了有參建構函式,則必須定義乙個無參建構函式。

析構函式使用者釋放一些類裡面動態分配的記憶體,函式定義格式為:類名(),例如person(),析構函式無參。

預設建構函式:乙個無參的建構函式,函式的內容為空

預設的析構函式:函式的內容為空

預設的拷貝函式:是乙個特殊的建構函式,其入參是該類的引用。當建立乙個類的時候,如果傳入的引數是同乙個類的引用,那麼會拷貝乙份,注意傳入的引數是類引用,而不是指標。例如:

person *per = new person(25,"dokin");

person *per2 = new person(*per);

或person per(25,"dokin");

person per2(per);

類的預設拷貝函式在使用上有風險,因為建立出的類物件,其成員如果是指標型別,會和類引用指向同一空間,在記憶體分配和釋放上就有可能產生被重複釋放的問題,這種情況下需要重寫拷貝函式。

按執行中定義物件的順序呼叫建構函式,靜態物件只呼叫一次建構函式,全域性物件在main函式執行前被構造。

類定義中如果使用了別的類,那麼會先按編碼順序依次呼叫別的類的建構函式,然後再呼叫本類的建構函式。

類的建構函式需要構造別的類時,在建構函式後面加:號,多個類用,隔開。如下面例子所示。注意,構造順序和:後面的順序無關,只和定義類成員的順序有關,即下面的例子依然是father先被構造。析構的順序則和構造的順序剛好相反。

class student

student(int age,char *father,int father_age,char *mother,int mother_age)\

:mother(mother,mother_age),father(father,father_age)

};int main(int argc,char **ar**)

類裡面可以使用static對成員和方法進行修飾,表明該成員或方法屬於類,而不是屬於類的例項物件。

類的靜態成員即使是private許可權,也可以通過類名來直接訪問。

靜態方法只能訪問靜態變數,不能訪問非靜態變數,因為靜態變數屬於類,而非靜態變數屬於類的例項物件。

類的例項物件也可以訪問類的靜態方法。

類的靜態方法可以在類裡面宣告然後類的外面定義,例如:

class person

int person::getcnt()

類定義時並沒有分配記憶體空間,因此需要在外部進行定義和初始化,下面是乙個例子。

class person

~person()

static int getcnt()

}int person::cnt = 0;

int main(int argc,char **ar**)

point(int x,int y):x(x),y(y){}

void print()

/* 實現p++ */

point operator++(point &p, int a)

上述函式通過函式入參的不同實現了函式過載,實現了前++和後++。

注意point operator++(point &p)函式中定義了返回了乙個臨時變數p,這會造成臨時變數p的建構函式和析構函式被呼叫,從而影響函式執行效率,最佳的實現方式如下,返回乙個引用,這樣就不會有臨時變數,也就不會呼叫建構函式和析構函式了。

/* 實現++p */

point& operator++(point &p)

以下操作的結果是不同的:p2 = p1會呼叫預設的拷貝函式,而不是呼叫operator=過載函式。先定義p3,然後p3=p1這樣才會呼叫operator=過載函式。

person p1;

person p2 = p1;

person p3;

p3 = p1;

C 入門基礎知識

1.c 基本資料型別 整型int 字元型 char 浮點型 float double 邏輯性 bool 無型別 void 也稱內建型別 語言內部 已定義好的型別 非基本資料型別 陣列 type 指標 type 結構體 struct 聯合體 union 列舉 enum 類 class 這些即就是自定義...

c 入門基礎知識

名字空間 namespace,即名字空間,是指 識別符號的各種可見範圍。c 標準程式庫 中的所有識別符號都被定義於乙個名為std的namespace中。使用 using namespace 可以使得後面不需要每次指定名字空間。1 名字 空間除了 系統定義 的名字空間之外,還可以自定義,定義 名字空間...

C 入門基礎知識

一 命名空間 命名空間 實際上就是乙個由程式設計者命名的記憶體區域,程式設計者可以根據需要指定一些有名字的空間域,把一些全域性實體分別放在各個命名空間中,從而與其他全域性實體分隔開來。它相當於乙個更加靈活的檔案域 全域性域 可以用花括號把檔案的一部分括起來,並以關鍵字namespace開頭給它起乙個...