C++. I need to overload the ==operator in my shoppingcart program so when a user
ID: 674954 • Letter: C
Question
C++. I need to overload the ==operator in my shoppingcart program so when a user adds an item it checks the list of items already added (in an array) to see if it is in there so duplicates can't be added. Here is code so far....
List.hpp
#include "Item.hpp"
class List{
private:
Item **arr;
int count;
int capacity;
void doubleSize();
void removeItem(int ind);
public:
List();
void addItem();
void removeItem();
void display();
};
List.cpp
#include "List.hpp"
List::List(){
count = 0;
capacity = 10;
arr = new Item*[10];
}
void List::addItem(){
string name, unit;
int num;
double price;
cout << "Enter Item Name: ";
cin >> name;
cout << "Enter unit(can, box, pounds, ounces): ";
cin >> unit;
cout << "How many " << name << "s do you want to buy: ";
cin >> num;
cout << "Unit price: ";
cin >> price;
if (count == capacity)
doubleSize();
arr[count++] = new Item(name, unit, num, price);
}
void List::doubleSize(){
capacity *= 2;
Item **newarr = new Item*[capacity];
for (int i = 0; i < count; ++i){
newarr[i] = arr[i];
}
arr = newarr;
}
void List::removeItem(int ind){
for (int i = ind; i < count - 1; ++i){
arr[i] = arr[i + 1];
}
--count;
}
void List::removeItem(){
cout << "Enter name of the item to remove: ";
string name;
cin >> name;
for (int i = 0; i < count; ++i){
if (arr[i]->getName() == name){
removeItem(i);
}
}
}
void List::display(){
double sum = 0;
for (int i = 0; i < count; ++i){
cout << "Name: " << arr[i]->getName() << endl;
cout << "Unit: " << arr[i]->getUnit() << endl;
cout << "Number: " << arr[i]->getNumbers() << endl;
cout << "Unit Price: " << arr[i]->getUnitPrice() << endl;
cout << "Extended Price: " << arr[i]->getUnitPrice() * arr[i]->getNumbers() << endl << endl;
sum += (arr[i]->getUnitPrice() * arr[i]->getNumbers());
}
cout << "The total bill is: " << sum << endl << endl;
}
Item.hpp
#include <iostream>
#include <string>
using namespace std;
class Item{
private:
string name;
string unit;
int num;
double unit_price;
public:
Item();
Item(string name, string unit, int num, double price);
void setname(string name);
void setUnit(string unit);
void setNumbers(int num);
void setUnitPrice(double price);
string getName();
string getUnit();
int getNumbers();
double getUnitPrice();
};
Item.cpp
#include <iostream>
#include <string>
#include "Item.hpp"
using namespace std;
Item::Item(){
name = "";
unit = "";
num = 0;
unit_price = 0;
}
Item::Item(string name, string unit, int num, double price){
this->name = name;
this->unit = unit;
this->num = num;
this->unit_price = price;
}
void Item::setname(string name){
this->name = name;
}
void Item::setUnit(string unit){
this->unit = unit;
}
void Item::setNumbers(int num){
this->num = num;
}
void Item::setUnitPrice(double price){
this->unit_price = price;
}
string Item::getName(){
return name;
}
string Item::getUnit(){
return unit;
}
int Item::getNumbers(){
return num;
}
double Item::getUnitPrice(){
return unit_price;
}
main.cpp
#include "List.hpp"
int main(){
int option;
List list;
while (true){
cout << "Enter 1 to add an item" << endl;
cout << "Enter 2 to remove an item" << endl;
cout << "Enter 3 to display" << endl;
cout << "Enter 4 to exit" << endl;
cout << "Choose an option: " << endl;
cin >> option;
switch (option){
case 1:
list.addItem();
break;
case 2:
list.removeItem();
break;
case 3:
list.display();
break;
case 4:
return 0;
default:
cout << "That was not a valid option" << endl;
return 0;
}
}
return 0;
}
Explanation / Answer
#include <iostream>
#include <string>
using namespace std;
class Item {
private:
string name;
string unit;
int num;
double unit_price;
public:
Item();
Item(string name, string unit, int num, double price);
void setname(string name);
void setUnit(string unit);
void setNumbers(int num);
void setUnitPrice(double price);
string getName();
string getUnit();
int getNumbers();
double getUnitPrice();
bool operator==(const Item* item);
};
// Overload + operator to add two Box objects.
bool Item::operator==(const Item* item)
{
if(this->name == item->name
&& this->unit == item->unit
&& this->num == item->num
&& this->unit_price == item->unit_price) {
return true;
} else {
return false;
}
}
Item::Item() {
name = "";
unit = "";
num = 0;
unit_price = 0;
}
Item::Item(string name, string unit, int num, double price) {
this->name = name;
this->unit = unit;
this->num = num;
this->unit_price = price;
}
void Item::setname(string name) {
this->name = name;
}
void Item::setUnit(string unit) {
this->unit = unit;
}
void Item::setNumbers(int num) {
this->num = num;
}
void Item::setUnitPrice(double price) {
this->unit_price = price;
}
string Item::getName() {
return name;
}
string Item::getUnit() {
return unit;
}
int Item::getNumbers() {
return num;
}
double Item::getUnitPrice() {
return unit_price;
}
class List {
private:
Item **arr;
int count;
int capacity;
void doubleSize();
void removeItem(int ind);
public:
List();
void addItem();
void removeItem();
void display();
};
List::List() {
count = 0;
capacity = 10;
arr = new Item*[10];
}
void List::addItem() {
string name, unit;
int num;
double price;
cout << "Enter Item Name: ";
cin >> name;
cout << "Enter unit(can, box, pounds, ounces): ";
cin >> unit;
cout << "How many " << name << "s do you want to buy: ";
cin >> num;
cout << "Unit price: ";
cin >> price;
if (count == capacity)
doubleSize();
Item* item = new Item(name, unit, num, price);
bool isExit=false;
for(int i=0;i<count;i++) {
if(item==arr[i]) {
isExit = true;
break;
}
}
if(isExit) {
cout<<"Duplicate item found!, An Item with given details already exist!"<<endl;
} else {
arr[count++] = item;
}
}
void List::doubleSize() {
capacity *= 2;
Item **newarr = new Item*[capacity];
for (int i = 0; i < count; ++i) {
newarr[i] = arr[i];
}
arr = newarr;
}
void List::removeItem(int ind) {
for (int i = ind; i < count - 1; ++i) {
arr[i] = arr[i + 1];
}
--count;
}
void List::removeItem() {
cout << "Enter name of the item to remove: ";
string name;
cin >> name;
for (int i = 0; i < count; ++i) {
if (arr[i]->getName() == name) {
removeItem(i);
}
}
}
void List::display() {
double sum = 0;
for (int i = 0; i < count; ++i) {
cout << "Name: " << arr[i]->getName() << endl;
cout << "Unit: " << arr[i]->getUnit() << endl;
cout << "Number: " << arr[i]->getNumbers() << endl;
cout << "Unit Price: " << arr[i]->getUnitPrice() << endl;
cout << "Extended Price: " << arr[i]->getUnitPrice() * arr[i]->getNumbers() << endl << endl;
sum += (arr[i]->getUnitPrice() * arr[i]->getNumbers());
}
cout << "The total bill is: " << sum << endl << endl;
}
int main() {
int option;
List list;
while (true) {
cout << "Enter 1 to add an item" << endl;
cout << "Enter 2 to remove an item" << endl;
cout << "Enter 3 to display" << endl;
cout << "Enter 4 to exit" << endl;
cout << "Choose an option: " << endl;
cin >> option;
switch (option) {
case 1:
list.addItem();
break;
case 2:
list.removeItem();
break;
case 3:
list.display();
break;
case 4:
return 0;
default:
cout << "That was not a valid option" << endl;
return 0;
}
}
return 0;
}
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.