你好,我很困惑我的istream & operator >>。我必須重載此運算符以爲C字符串使用動態內存分配的類進行輸入。超載istream運算符與動態內存分配
我Employee.h文件
#include <iostream>
using namespace std;
const double MIN_WAGE = 10.25;
class Employee {
int num;
char * name;
double rate;
public:
Employee();
Employee(const Employee&);
Employee operator=(const Employee&);
friend istream& operator>>(istream& is, Employee& employee);
friend ostream& operator<<(ostream& is, const Employee& employee);
friend bool operator>(const Employee& a, const Employee& b);
~Employee();
};
我有一個拷貝構造函數,要求賦值運算符
Employee::Employee(const Employee & e) {
name = NULL;
*this = e;
}
Employee Employee::operator=(const Employee & e) {
if (this != e) {
num = e.num;
rate = e.rate;
if (name != NULL) delete [] name;
if (e.name != NULL) {
name = new char[strlen(e.name) + 1];
strcpy(name, e.name);
}
else name = NULL;
}
return *this;
}
而在賦值運算符我已動態分配的內存爲C的長度我正在使用的字符串。到目前爲止,我istream的功能:
istream& operator>>(istream& is, Employee & e) {
int n;
double r;
}
我的問題是:如何我在istream的功能,使用新的動態內存分配在我的賦值操作符?
所以基本上它忽略了動態分配,只是做了一個1024的char數組? – user2140629 2013-03-14 02:13:17
不,它是使用您的動態分配,因爲有分配運算符。如果您只需要另一個動態分配,而不是在您的賦值運算符中,請更清楚地說明問題。無論如何,從流輸入名稱,你需要提供足夠大的緩衝區。 – Slava 2013-03-14 02:16:29
如何刪除您在istream函數中創建的新內存分配? – user2140629 2013-03-14 02:18:04