1.函式過載
什麼是過載:同一作用域內,允許函式名相同,引數列表不同的函式同時出現。乙個函式名對應多種函式實現
注:c++支援,c語言不支援
底層原理:c語言與c++編譯器對函式進行編譯的處理機制不同,c語言編譯器只是簡單的對函式名進行修飾(列入修飾名僅僅是對函式名加個_),然後通過修飾名進行鏈結。而c++編譯器在對函式名進行修飾時會考慮引數列表所以引數列表不同生成的修飾名也不同,則不同引數列表對應的修飾名不同,所以不會出現衝突。
2.引用
引用的使用類似於指標,但是引用不開闢空間,只是起乙個別名。
格式:型別 & 引用變數/物件名 = 引用實體
例子:
int a=10;
int&ra =a;
//陣列的引用
int ar[10]
=;int(
&br)[10
]=ar;
//指標的引用
int*ptr=
&a;int
*&q=ptr;
注:
1.引用是必須初始化;
2.乙個變數可以有多個引用
3.引用一旦引用了乙個實體,不能再引用其他實體。
常引用:
例:
const
int a=10;
//int &ra=a;錯誤,這樣寫則認為ra能修改,但是a不能修改
const
int&ra=a;
引用返回
當引用作為函式返回值時,注意當返回是臨時變數時,不能用引用返回,因為臨時變數在函式結束時被釋放。如果引用返回則返回的是釋放的空間。當返回的是靜態變數時,則可以用引用返回,因為靜態變數的空間不隨函式結束而釋放。
類與結構體:
c語言中結構體只能定義變數,c++中,結構體不僅可以定義變數,也可以定義函式。
struct中的成員預設訪問方式時public,class的成員預設訪問正規化是private。
類定義了乙個新的作用域,類的所有成員都在類的作用域中。在類體外定義成員,需要使用 :: 作用域解析符
指明成員屬於哪個類域。
例子:在類中宣告,類外定義
class person
;// 這裡需要指定printpersoninfo是屬於person這個類域
void person:
:printpersoninfo()
類例項化
用類型別建立物件的過程,稱為類的例項化
1.類只是乙個模型,定義乙個類並沒有給它分配實際的記憶體空間
2.類只有例項化後才占用實際的物理空間
類大小
類的大小是成員變數所佔空間的大小,存在位元組對齊。
類成員變數和類成員函式儲存空間不同,類襯管函式存放在公共的**段,避免呼叫成員函式時,相同**儲存多次,浪費空間。
this指標
this指標的型別:類型別* constvoid display(date* this) {}
只能在「成員函式」的內部使用
this指標本質上其實是乙個成員函式的形參,是物件呼叫成員函式時,將物件位址作為實參傳遞給this
形參。所以物件中不儲存this指標。
this指標是成員函式第乙個隱含的指標形參,一般情況由編譯器通過ecx暫存器自動傳遞,不需要使用者傳遞
物件例項化
1.建構函式
建構函式是特殊的成員函式,需要注意的是,建構函式的雖然名稱叫構造,但是需要注意的是建構函式的主
要任務並不是開空間建立物件,而是初始化物件。
建構函式函式名與類名相同,無返回值。建構函式可以過載
當沒有定義建構函式時,編譯器會生成預設建構函式(無參建構函式和全預設的建構函式都是預設建構函式)
2.析構函式
析構函式是特殊的成員函式。
其特徵如下:
析構函式名是在類名前加上字元 ~。
無引數無返回值。
乙個類有且只有乙個析構函式。若未顯式定義,系統會自動生成預設的析構函式。
物件生命週期結束時,c++編譯系統系統自動呼叫析構函式。
析構函式執行順序恰恰與建構函式執行順序相反。【全域性構造》靜態構造】
3.拷貝建構函式
拷貝建構函式也是特殊的成員函式,其特徵如下:
拷貝建構函式是建構函式的乙個過載形式。
拷貝建構函式的引數只有乙個且必須使用引用傳參,使用傳值方式會引發無窮遞迴呼叫。
C 學習(1)初識類與命名空間
using system 把命名空間引用到專案中,可用該命名空間所包含的類 using system.collections.generic using system.linq using system.text using system.threading.tasks namespace hell...
1 初識類與命名空間
在 console 專案裡面,引用 system.windows.forms來實現窗體。namespace my nuget 簡介引用 dll 時,你沒有源 幾乎可以說是 蒙著眼睛引用類庫 這是很危險的!特別是對於大型的專案。有了 nuget 後,你只需選擇要引用的包,nuget 會自動幫你對 dl...
C 初識類與物件
在c 中,結構體不僅可以定義變數時也可以定義函式。同樣的結構體c 中,將會用class代替struct class student 類的兩中定義方式 1.宣告和定義都在類體中 class student private int age char name 20 char gender 3 2.宣告放...