如果乙個類中什麼成員都沒有,就稱該類為空類,但是空類中並不是什麼都沒有,任何乙個類在我們不寫的情況下,都會自動生成6個預設成員函式。
class student{};
建構函式雖然叫做構造,但是並不是構造物件,而是完成初始化工作。
class date
void print()
private:
int _year;
int _month;
int _day;
};int main()
其特徵如下:
class date
void print()
date(int year, int month, int day)//帶參構造
private:
int _year;
int _month;
int _day;
};int main()
class date
private:
int _year;
int _month;
int _day;
};int main()
class date
void print()
private:
int _year;
int _month;
int _day;
};int main()
class date
void print()
date(int year=2018, int month=11, int day=1)//全預設的
private:
int _year;
int _month;
int _day;
};int main()
編譯器生成的預設建構函式有什麼作用?
class time
private:
int _hour;
int _minute;
int _second;
};class date
private:
//1.內建型別/基本型別
int _year;
int _month;
int _day;
//2.自定義型別
time _t;
};int main()
這就說明,預設的建構函式針對自定義型別會做初始化。
析構函式並不是完成物件的銷毀,而是完成類的清理工作,類的銷毀要借助編譯器來完成。 特點:
class string
~string()
private:
char* _str;
};class person
;
拷貝構造是建構函式的一種過載。
特點:
class date
//d2(d1)
date(const date& d)//拷貝構造
void print()
private:
int _year;
int _month;
int _day;
};int main()
class string
~string()
private:
char* _str;
};
賦值運算子過載是針對自定義型別的操作符。
運算子的過載:
class date
bool operator==(const date& d)
bool operator<(const date& d)
~date()
date d1(2018, 12, 1);
date d2(2018, 12, 24);
cout<<(d1 == d2)《但是如果返回型別加上引用:
class date
date(const date& d)
date& operator=(const date& d)//賦值運算子過載
return *this;
} ~date()
private:
int _year;
int _month;
int _day;
};int main()
就會減少一次拷貝構造。
需要注意的幾點:
我們將const修飾的成員函式稱之為const成員函式,const修飾成員函式時,實際上修飾的是成員函式隱藏的this指標,用來保護該類的任何成員變數不被修改。
class date
bool operator<(const date& d)
void print()const//這裡的const修飾的是*this,即this指標指向的物件 const date* this
private:
int _year;
int _month;
int _day;
};int main()
const物件可以調非const成員函式嗎?
非const物件可以呼叫const成員函式嗎?
const成員函式內可以呼叫其他的非const成員函式嗎?
非const成員函式內可以呼叫其他的const成員函式嗎?
class date
const date* operator&()const
private:
int _year;
int _month;
int _day;
};int main()
class date
const date* operator&()const
private:
int _year;
int _month;
int _day;
};int main()
c 類和物件 2
1 設計類就是設計型別 1 我們給這個賦予什麼合法值。2 類中包含什麼樣的函式和操作符。3 新型別的物件該如何被建立和銷毀。4 物件的初始化和賦值。5 物件作為函式的引數如何以值傳遞。6 誰使用此型別的物件成員。private 私有成員,只允許本類中的函式訪問,而類外部的任何函式都不能訪問。如果緊跟...
C 類和物件2
這篇部落格來介紹一下類的預設成員函式,在類中有6個預設成員函式,就算乙個類什麼都沒有,也會自動生成這6個預設成員函式。那麼這6個預設成員函式是什麼呢?完成初始化和清理的兩個函式 建構函式和析構函式 完成拷貝複製的兩個函式 拷貝建構函式和賦值過載函式 取位址過載的兩個函式 普通物件和const物件取位...
C 初識 類和物件(2)
在之前的文章裡,我們出初步了解了,什麼是類,類如何定義,類的大小怎麼計算等 乙個空類裡面什麼也沒有,但是它並非是什麼也沒有,只要是類,它就有6個預設的成員函式 1.建構函式 2.析構函式 3.拷貝建構函式 4.賦值操作符過載 5.取位址操作符過載 6.const修飾的取位址操作符過載 類的建構函式 ...