類設計總結
阿新 • • 發佈:2018-11-07
1.編譯器生成的成員函式
(1)預設建構函式
沒有引數/所有引數都有預設值。
a.能呼叫基類的預設建構函式.
b.呼叫本身是物件的預設建構函式。
(2)建構函式不被繼承。
(3)友元函式不能被繼承。因為不是類成員。
(3)基類應提供一個虛解構函式。
(4)explicit
2.值傳遞 引用傳遞
(1)物件作為引數時,用引用傳遞。
原因:值傳遞生成臨時拷貝,即呼叫拷貝建構函式-解構函式,浪費。
(2)繼承使用虛擬函式時,引數如果是基類引用,則可以傳入子類。但物件時引數則不可以。
3.值返回和引用返回
(1)返回物件 ,會生成副本。即會產生呼叫拷貝構造,析構的時間。
(2)不能返回 函式中臨時物件的引用。函式結束時臨時物件會消失。
總結:若返回臨時物件,則不用引用,其餘用引用。
4.使用const
a.方法不改引數。
voidfun(const A & a)
此時引數a不能傳遞給另一個函式,除非函式引數也是const.
b.方法不修改呼叫它的物件。
voidA::fun() const
c.引用或指標返回值不能用於修改物件中的資料。
const A & A::fun(const A &s) const
{
if(…)
return s;
else
return *this;
}
因為s和this都為const,則返回值也必須為const.
5.子類友元函式使用基類友元函式
強轉:子類指標或引用轉換成基類指標或引用。