一. operator=返回值及形參的講究:
1.string& string::operator=(const string& rhs)以及
string& string::operator=(string& rhs)以及
const string& operator=(const string &rhs){
return *this;
當遇到string s1,s2,s3;
(s2 = s1) = s3;這種情況時,會編譯失敗,失敗原因是將乙個值賦予const變數。
因為(s2 = s1)返回的結果是乙個const限定後的變數。
二. 在繼承層次中的複製控制:
當乙個派生類從基類中繼承時,需要顯示地呼叫基類的operator=函式,即是該函式時編譯器為基類自動合成的。
例如:calss base{
public:
base & operator=(const base& rhs);
private:
int x;
base & base::operator=(const base& rhs){
(*this).x = rhs.x;
return *this;
class derived : public base{
public:
derived& operator=(const derived& rhs);
private:
int y;
derived & derived::operator=(const derived& rhs){
static_cast(*this) = rhs;
*this.y = rhs.y
讓我們來看看編譯器此時會做什麼:
由於我們明確呼叫了static_cast將*this轉化為乙個base的引用,因而此時會獲取*this即派生類物件的基類子物件,
並呼叫base::operator=(rhs),而rhs是乙個派生類物件,因而編譯器又會再一次地將rhs轉化為乙個基類的引用,即做如下轉化:
const base& __temp1 = static_cast(*this);//實時上不需要生成此臨時物件,為了便於理解將其列出。
const base& __temp2 = static_castrhs;
__temp1.operator=(__temp2);
進而,我們可以在對derivedl類物件賦值的同時控制其base類子物件的賦值。
react 入門相關思考
宣告式開發 只關心資料,不操作 dom,面向資料開發單向資料流 父元件可以個子元件傳遞資料,子元件只能使用,不能做出改變等操作子元件想改變資料,必須從父元件 傳遞乙個父元件的方法來執行,最終還是 執行父元件的方法 可以和其他框架並存 react 只作用於其元件掛載的指定 id 的html 上,不影響...
operator過載整理
過載的操作符在類體中被宣告,宣告方式如同普通成員函式一樣,只不過他的名字包含關鍵字operator,以及緊跟其後的乙個c 預定義的操作符。可以用如下的方式來宣告乙個預定義的 操作符 class person inline bool operator const person ps const 實現方...
operator 過載函式
今天在看書時發現了乙個有意思的地方 class textblock char operator size t position private string text int main 對於 類的運算子過載函式 char operator size t position 其返回值是類成員text的引...