Здравствуйте, меня смущает мой istream & оператор >>. Мне нужно перегрузить этот оператор для ввода ввода для класса, который использует динамическое выделение памяти для строки 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? – user2140629
Нет, он использует динамическое распределение, поскольку есть оператор присваивания. Если вам нужно просто другое динамическое распределение, а не в вашем операторе присваивания, сделайте свой вопрос более ясным. В любом случае, чтобы ввести имя из потока, вам нужно предоставить достаточно большой буфер. – Slava
Как насчет удаления нового распределения памяти, созданного в функции istream? – user2140629