У меня программа с классом гражданина. У меня есть еще один класс под названием «участник», унаследованный от класса «гражданин». У меня есть функция, которая добавляет гражданина в массив. Я хочу отправить эту функцию человеку, и если и добавить проверку в функцию - если этот человек является участником, я хочу добавить нового участника в массив, иначе я хочу добавить нового гражданина.
I есть небольшая проблема - параметр, который я отправил в функцию, имеет тип гражданин, но если я хочу добавить нового участника, я также должен отправить этого участника, но поскольку я отправляю гражданина, а я не отправляю участника в эту функцию , Я не могу найти способ добавить участника в массив, так как мой конструктор участников требует имя участника.
Как я могу решить эту проблему? Какое наиболее распространенное решение этой проблемы?
Я пробовал использовать кастинг, но он не работает .. Я уверен, что есть элегантное решение, которое не требует от меня определения двух отдельных функций или отправить название партии в качестве другого параметра .. Я просто не могу найти это решение.
так что это функция, которую я написал, и я хочу иметь возможность добавить гражданина в качестве участника в массив граждан если гражданин на самом деле участник.
bool ElectionRound::addNewCitizen(const Citizen& citizen)
//This function add a given citizen into the system.
{
Citizen newCitizen(citizen);//copy c'tor
if (1 > citizen.getBallotNum() || citizen.getBallotNum() > bLogSize) //If the ballot Num enterd is not a a ballot which exists return false
{
cout << "The ballot num you entered for the citizen doesn't exist.\nThe citizen wasn't added to the voters note.\n";
return false;
}
if (checkIfIdExists(newCitizen.getId(), citizenNote, cLogSize)) //If the id of the new citizen already exists in the system return false
{
cout << "\nThe Id num you entered for the citizen alreay exist.\nThe citizen wasn't added to the voters note.\n";
return false;
}
else //Add citizen to the citizen list
{
if (cLogSize == cPhySize)//the citizen array is full?
{
cPhySize *= 2;
citizenNote = reallocCitizenArray(citizenNote, cLogSize, cPhySize);//make it bigger.
}
citizenNote[cLogSize] = new Citizen(newCitizen);//placement
cLogSize++;
int serialNum = newCitizen.getBallotNum();//get the ballot of the citizen.
for (int i = 0; i < bLogSize; i++)
{
if (serialNum == ballotList[i]->getSerialNum())
{
ballotList[i]->addVoter(newCitizen);//add the citizen to the correct ballot.
}
}
return true;
}
}
Спасибо!