1. 構(gòu)造函數(shù)
- 單參數(shù)構(gòu)造函數(shù)具壮,需要加explicit, 避免隱式轉(zhuǎn)換
explicit person_t(const std::string& wname):_id(count++),_name(wname) {}
explicit worker_t(const std::string &name):person_t(name),_wage(0), _level(0) {}
- 初始化列表
- 初始化列表可以用來對(duì)于 const object member進(jìn)行初始化
- 可以初始化 base class
worker_t():person_t(),_wage(0), _level(0) {}
- 無參構(gòu)造函數(shù)的調(diào)用
person_t p //正確
person_t p() // 錯(cuò)誤, 函數(shù)聲明
2. 拷貝構(gòu)造函數(shù)
- 拷貝構(gòu)造函數(shù)也可以有初始化列表
- 拷貝構(gòu)造函數(shù)聲明如下
person_t(const person_t& other_worker);
- 如果不需要拷貝構(gòu)造函數(shù),需要將拷貝構(gòu)造函數(shù)聲明為private
3. 賦值函數(shù)
- 賦值函數(shù)聲明如下
person_t& operator=(const person_t& other_worker);
- 如果不需要賦值函數(shù),則需要將賦值函數(shù)聲明為private
4. 析構(gòu)函數(shù)
- 如果類中包含virtual 聲明署海,則虛函數(shù)最好被聲明為virtual
- 析構(gòu)函數(shù)不能拋出異常倘是,必須處理所有異常
5. override
- 子類重寫父類的函數(shù)
6. virtual
- 子類重寫父類函數(shù)
virtual void info() {
std::cout << "this is person" << std::endl;
} - 則運(yùn)行時(shí)多態(tài),如果指針指向父類實(shí)例稚矿,則調(diào)用父類的實(shí)現(xiàn),如果指針指向子類實(shí)例,則調(diào)用子類的實(shí)現(xiàn)
person_t *ptr1 = new worker_t("ptr1"); //調(diào)用worker_t 類的info
ptr1->info();
delete ptr1;
person_t *ptr2 = new person_t("ptr2"); //調(diào)用person_t類的info
ptr2->info();
delete ptr2;
7. overload
- 重載指同名函數(shù)的不同實(shí)現(xiàn)晤揣,重載可以因?yàn)閰?shù)的個(gè)數(shù)不同桥爽, 也可以使參數(shù)的類型不同
- 重載不可以僅僅返回值不同的情況
8. 對(duì)象成員
- const object member, const 成員正在在初始化列表中進(jìn)行初始化
- non const object member
9. 類成員
類所有的對(duì)象共享此變量,如下實(shí)例中的ct
class person_t {
public:
static uint64_t ct;
}