在const和非const成員函式中避免重複

2021-06-21 17:10:14 字數 964 閱讀 3434

**的重複會導致編譯時間,維護,**膨脹等令人頭痛的問題,  當讓我們把其中一部分共有的操作移動到乙個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...