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開頭給它起乙個...