c 運算子過載與拷貝問題

2021-10-14 05:12:04 字數 2219 閱讀 6972

拷貝問題

預設建構函式小記

作者小記

呼叫本質和方法都在上面。

注意到輸入流和輸出流也可以看成乙個類,和int其實沒有什麼差別,至於&,返回乙個輸出流的引用是因為該類只有乙個,不能拷貝(我的理解目前是這樣,估摸著不怎麼精準,大家將就看哈)

這裡注意後置++是乙個死寫法,記住就好了,int 只是乙個佔位符,為了通過引數的不同達到過載函式的目的

這個通常會和位址掛鉤,故而涉及到淺拷貝和深拷貝的問題,將與拷貝問題一起展示

有位同學不小心把寫了一半的**弄亂了,不僅丟失了一些**,裡面還被小精靈混入了大量不可見的魔國符號,請你幫他把**梳理清楚,並將他的錯誤更正。

using namespace std; class counter

counter(int i)   friend counter operator ++(counter &);   friend counter operator (counter c1,counter c2);   void display() int main() 

【輸入形式】

兩個整數

【輸出形式】

乙個整數

【樣例輸入】

5 6【樣例輸出】

解決**示例

#include "iostream"

using namespace std;

class

counter

void

display()

private

: unsigned int value;};

counter operator++

(counter &p)

counter operator *

(counter c1,counter c2)

istream &operator>>

(istream &cin,counter &p)

int main()

怎麼樣,是不是掌握了呢~

淺拷貝:

簡單的賦值拷貝操作,位址也是一樣的

深拷貝:

在堆區中重新申請空間,進行拷貝操作

淺拷貝帶來的問題就是堆區的重複釋放,解決方案便是自己實現拷貝建構函式

棧區的規則是先進後出

自動釋放的記憶體是棧區的變數而不是堆區的

#include 

#include

using namespace std;

class

person

//預設建構函式

person

(const person &b)

//深拷貝建構函式

} person & operator=

(const person &b)

//過載賦值運算子};

int main()

示例2

class

person

~person()

}//過載 賦值運算子

person& operator=

(person &p)

m_age=

newint

(*p.m_age)

//深拷貝

return

*this

;//返回物件本身

} int *m_age;};

void

test01()

int main()

//注意: &讀作at,在函式申明的時候是引用的意思,其他的時候才是取位址

classw//

w(int i_a,int i_b):a

(i_a),b

(i_b)

w(int i_a,int i_b)w(

const w&w1)

//有參普通構造

w&operator=

(const w &w1)

//過載賦值運算子};

int main()

過載運算子,拷貝賦值運算子

一 過載運算子 在c語言當中遇到有很多的運算子,如 等等。如果我們用 對兩個物件進行判斷是否相等,系統就不樂意了,它不知道怎麼樣去判斷兩個物件是否相等?比如,我定義了乙個類,class a a obj1 a obj2 if obj1 obj2 錯誤,系統判斷不了 原因分析 系統遇到兩個物件之間的判斷...

拷貝構造與過載賦值運算子

編譯器預設的拷貝建構函式,發生的是memberwise initialization 成員逐一初始化 類的成員變數被逐一複製。而預設賦值運算子,也是逐一複製成員變數。一旦成員變數中,有程式設計師在heap開闢的空間 指標,new 使用預設拷貝建構函式就會引起淺拷貝和深拷貝的問題。include us...

c 中拷貝建構函式與「 運算子過載」

本文只是演示何時呼叫拷貝建構函式,何時用 運算子過載 不考慮類的實現正確。問題 someclass a someclass b a 呼叫的是拷貝建構函式,還是 運算子過載?演示 include class tc tc tc tc a tc operator tc a private int x in...