首页 > 解决方案 > 继承和构造函数| C++

问题描述

我有一个公民课程。我有另一个名为“contestant”的类,它继承自“citizen”类。我有一个将公民添加到数组的函数。我想向这个函数发送一个人,如果并在函数中添加一个检查 - 如果这个人是参赛者,我想将新的参赛者添加到数组中,否则我想添加一个新的公民。

我有一个小问题 - 我发送给函数的参数是citizen 类型,但如果我想添加一个新的参赛者,我还必须发送这个参赛者派对,但是因为我发送的是一个公民,我没有派一个派对这个函数,我找不到将参赛者添加到数组中的方法,因为我的参赛者构造函数需要派对名称。

我该如何解决这个问题?此类问题最常见的解决方案是什么?

我试过铸造,但它不起作用..我确信有一个优雅的解决方案不需要我定义两个单独的函数或将派对名称作为另一个参数发送..我只是找不到这个解决方案。

所以这是我编写的函数,我希望能够将公民作为参赛者添加到公民数组中,以防公民实际上是参赛者。

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

谢谢!

标签: c++oopinheritanceconstructor

解决方案


推荐阅读