**的重複會導致編譯時間,維護,**膨脹等令人頭痛的問題, 當讓我們把其中一部分共有的操作移動到乙個private型別的函式中,並且在兩個函式中分別呼叫它,是可以解決以上的問題的,但是還是重複了部分的**。
考慮以下**:
class textblock
public:
const char& operatpr (size_t position) const
... //邊界檢測
...//標記資料訪問
...//檢測資料完整性
return text[position];
char& operatpr (size_t position)
... //邊界檢測
...//標記資料訪問
...//檢測資料完整性
return text[position];
private:
std::string text;
所以說我們真正要做的就是實現一次operator ,並且使用它兩次,也就是說必須讓乙個呼叫另外乙個 , 他促使我們將常量移除。
class textblock
public:
const char& operatpr (size_t position) const
... //邊界檢測
...//標記資料訪問
...//檢測資料完整性
return text[position];
char& operatpr (size_t position)
return const_cast(static_cast(*this)[position]);
private:
std::string text;
新增const的那一次轉型迫使進行了一次安全轉型(將非const轉成了const), 所以使用static_cast .
移除const動作是由const_cast完成的
類的const和非const成員函式的過載
類的const和非const成員函式的過載 只要了解過c 的操作符過載的語法,很快就可以寫出下面這個操作符過載函式 char operator int posion function 1 注意,這裡該函式的返回值為乙個引用,否則str 0 c 這樣的語句就會不合法,因為str 0 將是乙個左值。那麼...
類的const和非const成員函式的過載
類的const和非const成員函式的過載 只要了解過c 的操作符過載的語法,很快就可以寫出下面這個操作符過載函式 char operator int posion function 1 注意,這裡該函式的返回值為乙個引用,否則str 0 c 這樣的語句就會不合法,因為str 0 將是乙個左值。那麼...
const 和 非const函式過載
在下面的 中a1呼叫const版本,a2呼叫非const版本。const a a1 a a2 a1.x a2.x 後面加const表示在該函式中不能對類的資料成員進行改變,比如 class a 這可以 int x const 當然有特殊情況,就是用mutable關鍵字修飾過的成員變數可以在宣告為co...