1. big three
big three是指當類中有指標物件時,class除了建構函式constructor之外還要提供copy constructor, copy operator, destructor,以矩陣類為例:
2. mutable和constclass matrix
matrix(const matrix& rhs);
matrix& operator= (const matrix& rhs);
~matrix()
private:
int _row, _col;
double* _pmat;
}matrix::matrix(const matrix& rhs):_row(rhs._row), _col(rhs._col)
matrix& matrix::operator= (const matrix &rhs)
//this指標指向呼叫者,如a = b,a就是"="的呼叫者,this指向a
return *this;
}
如果某個引數是const reference引數,class設計者必須在memble function身上標註const,以此告訴編譯器:這個member function是不會更改class object的內容。const修飾符緊接於函式引數列表之後,凡是在class主體以外定義者,如果是乙個const member function,那就必須同時在宣告與定義中指定const。
3. 合作關係必須建立在友誼的基礎上class matrix
int matrix::row() const
在函式原型或類前加上friend關鍵字,就可以把它宣告為某個class的友元,這份宣告可以出現在class的任意位置,不受private和public的硬性,成為了friend,就具備了和class member function相同的訪問許可權。
4. fuction-like classestemplate
class binarytree;//前置宣告
template
class btnode
fuction-like classes指仿函式,也可以叫函式物件function object。標準庫中定義了很多仿函式,其實它們都是乙個類,但是都過載了operator(),使這個類變的很像函式。通常我們會把function object當作引數傳給泛型演算法。
include #include
#include
using
namespace
std;
//這個類用來測試傳入值是否小於某指定值
class less_than
int comp_val() const
void comp_val(int nval)
bool
operator() (int _value) const;
private:
int _val;
};inline
bool less_than::operator() (int _value) const
void count_less_than(vector
& vec, int comp, ostream& os = cout)
}int main()
; vector
vec(ia, ia + 6);
int comp_val = 6;
cout
<< "number of elements less than "
<< comp_val << " are"
<< endl;
count_less_than(vec, comp_val);
system("pause");
return
0;}
把書看薄,再看厚
一直以來有許多讀者問我 你的書都那麼厚一本,看起來真費勁,那麼多內容,好像都是重點,看完後卻記不住多少,該怎麼辦?怎樣的看書方法效果會更好?這的確是事實,在我的 網管員必讀 包括第一版和第 2版 和 網路工程師必讀 兩大系列中每本都是厚厚的一大本,少則 500來頁,多則 700來頁。第一版 網管員必...
把書看薄,再看厚
一直以來有許多讀者問我 你的書都那麼厚一本,看起來真費勁,那麼多內容,好像都是重點,看完後卻記不住多少,該怎麼辦?怎樣的看書方法效果會更好?這的確是事實,在我的 網管員必讀 包括第一版和第 2版 和 網路工程師必讀 兩大系列中每本都是厚厚的一大本,少則 500來頁,多則 700來頁。第一版 網管員必...
把書看薄,再看厚
一直以來有許多讀者問我 你的書都那麼厚一本,看起來真費勁,那麼多內容,好像都是重點,看完後卻記不住多少,該怎麼辦?怎樣的看書方法效果會更好?這的確是事實,在我的 網管員必讀 包括第一版和第 2版 和 網路工程師必讀 兩大系列中每本都是厚厚的一大本,少則 500來頁,多則 700來頁。第一版 網管員必...