operator 相關思考

2021-06-03 15:53:14 字數 1234 閱讀 4096

一. 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的引...