C 運算子過載

時間 2022-07-11 22:50:11

1樓:匿名使用者

問題出在

void operator=(string ob1) 這一句,可以改成

void operator=(string &ob1)原因在於 引數 string ob1 相當於是個臨時變數,他的值是,ob2的拷貝,但是它的生命週期在 「=」以後就到頭了,也就是說就析構了。

看你的string類裡有個 char*p;這個就是罪魁禍首了,傳遞引數的時候因為是值傳遞,所以 臨時變數裡 p 的值和 ob2 是一樣的,指向的同乙個位置,臨時變數析構的時候把 p 指向的資料給釋放了,你的ob2又釋放了一次,所以就出錯了。

這是個很經典的錯誤,貌似還有個術名,忘了叫啥了,呵呵 ^_^

2樓:

你的建構函式有問題!

string(char *p1)

void operator=(string ob1)//有問題建議你的建構函式除了傳遞指標,還要傳遞字串長度,如:

string(char *p1,int lth)

3樓:匿名使用者

運算子過載部分修改如下:

4樓:匿名使用者

#include

#include

#include

using namespace std;

class string

else

}string(string const& other)~string()

string& operator=(string const& other)

return *this;

}void show()

private:

char *data_;

};int main()

C 過載 運算子的問題,c 運算子過載問題

只拿了你有疑問的兩個函式出來討論,看是否明白 time time operator 這是字首 return this time time operator int 這是字尾 return temp time operator 這表示前 即 time1 呼叫該函式 time operator int ...

c 過載運算子的作用是什麼,C 中 運算子過載 到底有什麼何意義?

就是可以定義新的運算方法,比如虛數的 法,你定義2個虛數,直接用 是不行的,系統不認,你必須自己寫個過載,讓實部和實部相加,虛部和虛部相加,你先了解下什麼叫函式過載就能更好理解了。過載就是說你對系統給的不滿意,無法滿足你自己的需求,然後你寫個能滿足自己的需求代替系統的,當然只在這個類裡有效。就是用函...

50金!急求高手 用C 實現運算子過載

友元函式 include include class test test char x void show void main 成員函式 include include class test test char x void main 去看我的文件 c 操作符過載專題 保證你兩小時完全搞懂操作符過載...