наследование и конструкторы | c ++ - PullRequest
0 голосов
/ 28 мая 2020

У меня программа с классом гражданина. У меня есть еще один класс под названием «участник», унаследованный от класса «гражданин». У меня есть функция, которая добавляет гражданина в массив. Я хочу отправить эту функцию человеку, и если и добавить проверку в функцию - если этот человек является участником, я хочу добавить нового участника в массив, иначе я хочу добавить нового гражданина.

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

Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...