первый раз. Заранее благодарим за вашу переписку и терпение.
Мне нужно предотвратить копирование объекта, если этот объект уже существует в моем массиве.
Я не могу понять, как их сравниватьзначения и предотвратить копирование.
Мой следующий шаг пытается: unique_ptr
или shared_ptr
или compare()
или iterator
.
НЕТ ВЕКТОРОВ .... Я ДОЛЖЕН ВЫДЕЛИТЬ ИДЕЛОКУЛИРОВАТЬ ВСЕ.
ConfirmationSender.h
class ConfirmationSender {
Reservation** ppCon;
size_t cCnt;
public:
ConfirmationSender();
~ConfirmationSender();
ConfirmationSender& operator+=(const Reservation& res);
// ConfirmationSender& operator-=(const Reservation& res);
void display(std::ostream& os) const;
};
std::ostream& operator<<(std::ostream& os, const ConfirmationSender& obj);
ConfirmationSender.cpp
ConfirmationSender& ConfirmationSender::operator+=(const Reservation& res) {
if (cCnt == 0) {
++cCnt;
ppCon = new Reservation* [cCnt];
ppCon[0] = new Reservation(res);
}
else {
Reservation** temp1 = nullptr;
temp1 = new Reservation * [cCnt];
for (size_t i = 0; i < cCnt; i++) {
temp1[i] = ppCon[i];
}
++cCnt;
delete[] ppCon;
ppCon = new Reservation * [cCnt];
for (size_t i = 0; i < cCnt - 1; i++) {
ppCon[i] = temp1[i];
}
ppCon[cCnt - 1] = new Reservation(res);
delete[] temp1;
temp1 = nullptr;
/*
NEED TO IMPLEMENT CONDITION
SO THE VALUE I COPY
CANNOT BE A VALUE ALREADY EXISTING IN ARRAY
*/
}
return *this;
}
class Reservation {
std::string id, name, email;
int seats, day, hour;
public:
Reservation();
Reservation(const std::string& m_res);
void display(std::ostream& os) const;
};
std::ostream& operator<<(std::ostream& os, const Reservation& obj);
Reservation::Reservation() {
seats = 0;
day = 0;
hour = 0;
};
Reservation::Reservation(const std::string& m_res) {
std::string t_str;
t_str = m_res;
t_str.erase(std::remove(t_str.begin(), t_str.end(), ','), t_str.end());
istringstream iss(t_str);
std::string buffer = {};
static int count = 0;
while (iss >> buffer) {
switch (count % 6) {
case 0: id = buffer; break;
case 1: name = buffer; break;
case 2: email = buffer; break;
case 3: seats = atoi(buffer.c_str()); break;
case 4: day = atoi(buffer.c_str()); break;
case 5: hour = atoi(buffer.c_str()); break;
}
count++;
}
buffer.clear();
iss.str(std::string());
}
void Reservation::display(std::ostream& os) const {
string menu_type;
if (hour >= 6 && hour <= 9) { menu_type = "Breakfast"; }
else if (hour >= 11 && hour <= 15) { menu_type = "Lunch"; }
else if (hour >= 17 && hour <= 21) { menu_type = "Dinner"; }
else { menu_type = "Drinks"; }
os << "Reservation "
<< id << " "
<< name << " <"
<< email << "> "
<< menu_type << " on day "
<< day << " @ "
<< hour << ":00 for "
<< seats << " people." << '\n';
}
std::ostream& operator<<(std::ostream& os, const Reservation& obj) {
obj.display(os);
return os;
}
main.cpp
// Confirmation Sender
{
std::cout << "CS: Testing Operators\n";
std::cout << "==========================\n";
sender1 += *ppReservations[5];
sender1 += *ppReservations[16];
sender1 += *ppReservations[16];
// THE SECOND [16] SHOULD NOT BE COPIED BY ADDITION OPERATOR
std::cout << sender1;
std::cout << "==========================\n\n";
}