Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

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;
}

Hire Me For All Your Tutoring Needs
Integrity-first tutoring: clear explanations, guidance, and feedback.
Drop an Email at
drjack9650@gmail.com
Chat Now And Get Quote