class human
① 預設建構函式
當建立物件時,編譯器自動生成預設建構函式,即為合成的預設建構函式。
類:
class human
human h;
//建立物件,編譯器呼叫human()合成的預設建構函式
當在建構函式中初始化變數資料時,即為手動定義的預設建構函式。
類:
class human
實現:
human::
human()
呼叫:
human h;
//建立物件,編譯器呼叫human()手動定義的預設建構函式
② 自定義建構函式
在建構函式中新增引數,並初始化資料。
類:
class human
實現:
human::
human
(string name,
int age)
呼叫:
human h
("李四",22
);//建立物件,編譯器呼叫自定義的建構函式
③ 拷貝建構函式
當建立物件,初始化時,將另乙個物件賦值給當前建立的物件的時候,呼叫拷貝建構函式。
類:
class human
實現:
human::
human
(const human& other)
呼叫:
human h1
("王五",21
);//建立物件,編譯器呼叫自定義的建構函式
human h2
(h1)
;//呼叫拷貝建構函式
human h3 = h1;
//呼叫拷貝建構函式
上面的拷貝函式為手動定義的拷貝建構函式,當省略拷貝建構函式不寫時,編譯器也會自動生成和呼叫拷貝建構函式,即為合成的拷貝建構函式。
拷貝建構函式的使用場景:
當函式的實參是物件,返回型別為類。
陣列物件,初始化。
human test
(human human)
human test1
(human& human)
human h1,h2,h3;
test
(h1)
;//呼叫兩次拷貝函式
test1
(h1)
;//呼叫一次拷貝函式
human men=
;//呼叫三次拷貝函式
④ 賦值建構函式
當建立物件後,將另乙個物件賦值給當前建立的物件的時候,呼叫拷貝賦值建構函式。
類:
class human
實現:
human& human::
operator=(
const human& other)
呼叫:
human test
(human& human)
human h1
("王五",21
);//建立物件,編譯器呼叫自定義的建構函式
human h2
(h1)
;//呼叫拷貝建構函式
h2 = h1;
//呼叫賦值建構函式
human h3;
h3 =
test
(h1)
;//呼叫賦值建構函式
一般用來釋放資源(例如申請了動態記憶體,需要釋放),當沒有資源需要釋放而不寫析構函式時,編譯器也會在物件銷毀時自動呼叫。
類:
class human
定義:
class human
初始化:
string human::name =
"張三"
;//初始化靜態資料成員
void
play()
靜態成員函式可以用類名直接訪問,也可以建立物件後進行訪問。
靜態成員函式不能訪問普通的資料成員(例項成員)和普通的成員方法(例項方法)。
定義:
class human
實現:
human::
drink()
呼叫:
human::
drink()
;//可以直接用型別呼叫
human h1;
h1.drink()
;//物件也可以呼叫
const型別的資料成員無法修改,只能讀。
定義:
class human
初始化:可以使用類內值,也可以使用建構函式的初始化列表
human::
hunman()
:booltype
("未知"
)
在這個函式中,不能修改任何資料成員,只能讀。也不能呼叫其他的非const的成員函式
定義:
class human
初始化:可以使用類內值,也可以使用建構函式的初始化列表
void human::
play()
const
【例】乙個計算機類,由cpu晶元,硬碟,記憶體等組成。
其中cpu晶元也使用類來表示,則cpu類與計算機類為組合關係。計算機物件被建立時,cpu物件也會被建立,計算機物件被銷毀時,cpu物件也會被銷毀。
cpu類:
class cpu
計算機類:
#include
"cpu.h"
//包含cpu類
class computer
初始化:
computer::
computer
(const string *name,
const
int version,
int harddisk,
int memory)
:cpu
(name,version)
【例】乙個計算機需要外接音效卡,建立乙個音效卡類。
音效卡類與計算機類為聚合關係。計算機物件被建立時,音效卡物件也會被建立,計算機物件被銷毀時,音效卡物件不會被銷毀。
計算機類:
class
voice
;//直接定義voice類
class computer
初始化:
void computer::
addvoice
(voice *voice)
呼叫:
#include
"computer.h"
//包含計算機類
#include
"voice.h"
//包含音效卡類
computer cmp;
cmp.
addvoice()
;//呼叫新增音效卡的方法
2021 02 28 助教一周小結(第四周
截止至2月28日 作業部落格提交情況 107 132 25人未提交 完成率 81 點評作業 10份 協助其他助教進行第一次結對作業選題。進行個人程式設計作業點評。很多同學並沒有用git來管理 而是將git作為題目要求的乙個指標,先完成 再直接一次性提交到git倉庫 同學們還是沒有遵循commit規範...
C語言一周學習內容總結
1.巨集定義只是簡單的替換,它 不進行型別檢查,只是在預編譯的時候將巨集名替換為巨集體。系統是不會為巨集開闢記憶體空間的。所以不能對巨集進行遞增遞減的算數運算,也不能對紅巨集進行取位址的操作。例如 define pi 3.14 2.而由const 定義的常變數則是乙個完全不同的概念。常變數是乙個數值...
第一周C 學習總結
這學期學習專業課c 此篇部落格主要總結一下這周學習的內容。一 c 中對於如何輸出保留小數點的數字。以老師發的實驗題為例,求兩點之間的座標。一開始我是以printf來進行輸出的,如下 include includeusing namespace std int main 但後面老師講了fixed和se...