У меня есть такие классы: Customer, Order, OrderByPhone и OrderByInternet.Класс Order является абстрактным и имеет такие дочерние классы, как OrderByPhone и OrderByInternet.У меня есть вектор объектов Order внутри класса Customer (поскольку клиент делает заказ (byPhone или byInternet). Я хочу, чтобы Клиент мог добавить либо объект OrderByPhone, либо объект OrderByInternet в вектор объектов Order.
НижеВот какой-то код:
vector<Order*> listOfOrder;
void customer::addOrder(Order *orderObj)
{
listOfOrder.push_back(orderObj);
} // these are inside Customer class
В классе контроллера есть список клиентов и функция создания заказа, такая как:
void createOrder(vector <customer> &listCustomer) {
double tax;
double total;
int accntNumCheck;
int orderTypeOption;
string url;
string clerkName;
int phoneNum;
//order orderObj; cannot create an object of order because its an abstract class but you can create a pointer of orders
Order *orderObj;
vector<Order *> listOfOrder;
bool found = false;
customer *foundCust; //it is a pointer coz we need to add the order into the original customer;
cout << "Enter Customer Account No: " << flush;
cin >> accntNumCheck;
for(int unsigned i = 0; i < listCustomer.size(); i++){
if(listCustomer[i].getAccntNum() == accntNumCheck){
cout<< listCustomer[i].getAccntName();
found = true;
foundCust = &listCustomer[i];
}
}
if (found) {
cout << "1. Order By Phone " << endl;
cout << "2. Order By Internet" << endl;
cout << "Your Option >>> " << flush;
cin >> orderTypeOption;
switch (orderTypeOption) {
case 1:
cout << "Enter clerk name: " << flush;
cin >> clerkName;
cout << "Enter Phone Number: " << flush;
cin >> phoneNum;
cout << "Enter Tax: RM" << flush;
cin >> tax;
cout << "Enter Total: RM" << flush;
cin >> total;
orderObj = new orderByPhone(tax, total, clerkName, phoneNum);
//(iterCust)->addOrder(orderObj); this is incorrect but idk why
foundCust->addOrder(orderObj);
break;
case 2:
cout << "Enter URL: " << flush;
cin >> url;
cout << "Enter Tax: RM" << flush;
cin >> tax;
cout << "Enter Total: RM" << flush;
cin >> total;
orderObj = new orderByInternet(tax, total, url);
//(iterCust)->addOrder(orderObj); this is incorrect but idk why
foundCust->addOrder(orderObj);
break;
}
delete foundCust; //MUST DELETE THE POINTER AFTER WE USED IT
}
else{
cout << "Customer not found!";
}
}
Это главное в контроллере:
int main()
{
vector <customer> listCustomer;
int option;
do
{
option=menu();
switch (option)
{
case 1: addCustomer(listCustomer);
break;
case 2: createOrder(listCustomer);
break;
case 3: print(listCustomer);
break;
default: cout<<"Bye"<<endl;
}
}while (option <=3);
listCustomer.clear();
return 0;
}
У меня проблема с печатью, и я уверен, что есть проблема в том, как я добавляю дочерние объекты в вектор базового класса. Извините, что не предоставил весь код, так как я думал, что это будет слишком много, и я загрузилтолько необходимый код. PS -> Мне удалось добавить клиента и распечатать (для проверки). В основном мне нужна помощь с добавлением Заказа (первый код) в классе Customer. Спасибо, что нашли время прочитать все это.