運算子過載

2021-09-25 17:22:00 字數 717 閱讀 3665

運算子過載:1.不能改變運算子的優先順序

2.滿足和系統提供的運算子相同的邏輯

3.不能創造新的運算子

淺拷貝:將原物件或原陣列的引用直接賦給新物件,新陣列,新物件/陣列只是原物件的乙個引用

用string生成乙個物件str1,直接將物件賦給str2,共用一塊記憶體。(原物件和新生成的物件共用一塊實體)

影響:1.兩個物件的_str指向同一片空間,那麼析構的時候這片空間必然會析構兩次。

2.乙個的改變會影響另乙個。

解決方案:深拷貝(每次都要重新開闢空間效率低)、使用引用計數

深拷貝:建立乙個新的物件和陣列,將原物件的各項屬性的「值」(陣列的所有元素)拷貝過來,是「值」而不是「引用」

str2重新開闢記憶體來儲存str1賦過來的值

影響:深拷貝雖然每個指標會指向不同的空間,沒有乙個空間多次釋放的問題,但可能儲存的資料都是一樣的,這樣會導致空間的浪費。

寫時拷貝:資料修改前(淺拷貝);資料修改時(深拷貝);在資料沒修改之前共用一塊記憶體,資料需要修改時重新開闢記憶體進行拷貝。

運算子過載之過載型別運算子

普通型別 類型別 呼叫對應的只有乙個引數 引數的型別就是這個普通型別 的建構函式 需求 boy boy1 10000 薪資 建構函式boy int boy boy2 rock 姓名 建構函式boy char 普通型別賦值給類型別其實很簡單,就是專門的對這個賦值的型別定義乙個建構函式。編譯器在執行 的...

運算子過載 賦值運算子的過載

有時候希望賦值運算子兩邊的型別可以不匹配,比如,把乙個int型別變數賦值給乙個complex物件,或把乙個 char 型別的字串賦值給乙個字串物件,此時就需要過載賦值運算子 注意 賦值運算子 只能過載為成員函式 賦值運算子過載例項示例 include include using namespace ...

運算子過載

c 中的運算子 1。大多數系統預定義運算子都能過載 不值得過載 不能被過載 2過載不能改變優先順序 不能改變結合性 不能改變運算子所需運算元的個數 過載後,可按這些運算子的表達方式使用 運算子過載的語法 一 通過運算子過載函式進行過載 1。運算子過載函式是成員函式 語法形式 type x opera...