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 操作符過載專題 保證你兩小時完全搞懂操作符過載...