一.物件導向的特徵:封裝,繼承,多型
二.類是一種宣告,不佔記憶體
兩種建立物件的方式:
1.一種是在棧上建立,形式和定義普通變數類似;
2.一種是在堆上建立,必須要用乙個指標指向它。delete釋放到不再使用的物件。
三.申請空間使用類成員
1.student *stu = new student;
stu-> ....
delete stu;
2.student *stu = new student[10];
stu[0]. ...
stu[1]. ...
delete stu;
3.student stu1;
student *pstu = &stu1;
pstu-> ...
注:類定義時,不能對成員變數賦值
四.在類內宣告,在類外定義
注:在類的內部,三種許可權可以互相訪問
**:#include
using namespace std;
class student
;void student::name(char *name)
aoid student::age(int age)
void student::score(float score)
void student::print()
int main()
四.建構函式
1.名字和類相同
2.無返回值
3.不需要顯示呼叫
4.建立物件時自動執行
注:建構函式必須是 public 屬性的,否則建立物件時無法呼叫。當然,設定為 private、protected 屬性也不會報錯,但是沒有意義。
例子:#include
using namespace std;
class student
;student::student(char *name,int age,float score)
void student::print()
int main()
注:1.函式在**區分配記憶體
2.成員物件在棧上,堆上分配記憶體
建構函式的過載:
1.建構函式的呼叫是強制性的,一旦在類中定義了建構函式,那麼建立物件時就一定要呼叫,不呼叫是錯誤的。如果有多個過載的建構函式,那麼建立物件時提供的實參必須和其中的乙個建構函式匹配;
2.反過來說,建立物件時只有乙個建構函式會被呼叫
五.初始化成員列表
例:student::student(char *name,int age,float score):m_name(name),m_age(age),m_score(score){}
注:與成員在類中的宣告的順序有關
六.析構函式
1.無返回值
2.不要顯示呼叫
3.程式銷毀時自動執行
例:#include
using namespace std;
class area
;area::area(int a,int b)
area::~area()
void area::print()
int main()
注意:1.析構函式沒有引數,不能被過載,因此乙個類只能有乙個析構函式。
2.如果使用者沒有定義,編譯器會自動生成乙個預設的析構函式
析構函式執行時機:
1.在所有函式之外建立的物件是全域性物件,它和全域性變數類似,位於記憶體分割槽中的全域性資料區,程式在結束執行時會呼叫這些物件的析構函式。
2.在函式內部建立的物件是區域性物件,它和區域性變數類似,位於棧區,函式執行結束時會呼叫這些物件的析構函式
七.const
1.初始化const成員變數:
2.引數初始化表還有乙個很重要的作用,那就是初始化 const 成員變數。
3.初始化 const 成員變數的唯一方法就是使用引數初始化表
八.this指標
this 是 c++ 中的乙個關鍵字,也是乙個 const 指標,它指向當前物件,通過它可以訪問當前物件的所有成員。
所謂當前物件,是指正在使用的物件。
注意:1.this 只能用在類的內部,通過 this 可以訪問類的所有成員,包括 private、protected、public 屬性的。
2.this 是乙個指標,要用->來訪問成員變數或成員函式。
3.this 是 const 指標,它的值是不能被修改的,一切企圖修改該指標的操作,如賦值、遞增、遞減等都是不允許的。
4.this 只能在成員函式內部使用,用在其他地方沒有意義,也是非法的。
只有當物件被建立後 this 才有意義,因此不能在 static 成員函式中使用(後續會講到 static 成員)
this是什麼?
1.this 實際上是成員函式的乙個形參,在呼叫成員函式時將物件的位址作為實參傳遞給 this。
2.不過 this 這個形參是隱式的,它並不出現在**中,而是在編譯階段由編譯器默默地將它新增到引數列表中。
3.this 作為隱式形參,本質上是成員函式的區域性變數,所以只能用在成員函式的內部,並且只有在通過物件呼叫成員函式時才給 this 賦值
九.static成員變數
在c++中,我們可以使用靜態成員變數來實現多個物件共享資料的目標。
靜態成員變數是一種特殊的成員變數,它被關鍵字static修飾,
static 成員變數屬於類,不屬於某個具體的物件,即使建立多個物件,也只為 m_total 分配乙份記憶體,所有物件使用的都是這份記憶體中的資料。
當某個物件修改了 m_total,也會影響到其他物件。
注意:static 成員變數必須在類宣告的外部初始化,具體形式為: type class::name = value;
靜態成員變數在初始化時不能再加 static,但必須要有資料型別。
被 private、protected、public 修飾的靜態成員變數都可以用這種方式初始化。
注意:static 成員變數的記憶體既不是在宣告類時分配,也不是在建立物件時分配,而是在(類外)初始化時分配。
反過來說,*沒有在類外初始化的 static 成員變數不能使用
建構函式 析構函式 虛析構函式
說析構函式之前,先說下建構函式。建構函式用來完成對物件的一系列初始化操作,主要作用有 1.給建立的物件建立乙個識別符號 2.為物件資料成員開闢記憶體空間 3.完成物件資料成員的初始化 當並未顯示的定義建構函式時,會生成乙個預設的建構函式,預設建構函式不能完成物件資料成員的初始化,只能給物件建立一識別...
構造 析構函式
e09不能在構造 析構函式中呼叫虛函式 類名 default 隱式宣告為內聯函式,在類外定義時使用default則不是內聯函式cp449 類名 給定實參 成員1 實參1 1.最好按照宣告次序進行初始化ep29,cp259 2.效率高於函式體拷貝初始化 3.delegating constructor...
C 學習 構造 析構函式
一.建構函式 何時呼叫建構函式 class1 cl new class1 new運算子為物件分配記憶體,然後再呼叫物件的建構函式。1 建構函式 無返回值 與類同名,可以過載,在生成類的例項時呼叫,可以初始化字段,當然也可以加入 獲取目前生成的例項數 class mode 2 靜態建構函式 初始化靜態...