删除后使用指向对象的指针

时间:2018-06-18 07:13:26

标签: oop visual-c++ visual-studio-2015

我需要你的帮助。 我正在为停车场编写代码(这是我大学的课程作业),而且我的一个Parking_Lot课程方法有问题,我需要你的帮助。

我有2个类: 汽车类保存汽车对象,我传递给Parking_Lot类。它在构造函数中获得以下数据:汽车模型(带有char数组)和汽车ID(带有静态int),必须介于1000到9999之间(每辆汽车都有一个唯一的ID号)。 Parking_Lot包含所有汽车对象的类。它在构造函数中获得以下数据:停车场大小(带有int号)。停车场类基于堆栈数据类型。它有一个类型为Cars的指针数组,它(在push方法中)获得指向car对象的指针。

我的任务中的一个要求是我将创建一个测试函数(在main函数中使用它)来测试Parking_Lot类和Cars类。

这是测试功能:

void test2()
{
    int size, CarNum = 0;
    cout << "Please enter the parking lot size: ";
    cin >> size;
    cout << "Please enter the Number of Cars to run on: ";
    cin >> CarNum;
    cout << "Parking size: " << size << endl;
    Parking_Lot MainLot(size);
    for (int i = 0; i < CarNum; i++)
    {
        int ID = GetCarID();
        if (ID != 0)
        {
            Cars* car = new Cars(GetCarModle(), ID);
            MainLot.push(car, 8, 10);
            delete car;
        }
    }
    MainLot.DispStaying();

}

和推送方法:

bool Parking_Lot::push(Cars *car,int ent_time_hour, int ent_time_min)
{
    cout.copyfmt(init);
    if (is_full())
    {
        m_stayed_out++;
        return false;
    }
    car->set_ent_time(ent_time_hour, ent_time_min);
    cout << setw(11) << left << "Entered:" << *car << "at " << setfill('0') << setw(2) << right << car->get_ent_time(false) << ":" << setfill('0') << setw(2) << right << car->get_ent_time(true) << endl;
    m_Lot[++m_front] = car;
    car->set_parking(true);
    cout.copyfmt(init);
    return true;
}

我的问题在于MainLot.DispStaying()函数。 我意识到,如果我删除for循环中的汽车指针我不能用它来显示DispStaying()函数中的汽车对象,但for循环是在要求的分配中,所以我不能通过推送方法有不同的价值并解决问题。

你能帮帮我,告诉我如何使用DispStaying()方法吗?

DispStaying()方法(在Parking_Lot类中):

void Parking_Lot::DispStaying(void) const
{
    cout << "day summery:" << endl;
    cout << m_stayed_out << " cars didnt have space" << endl;
    printf("The following cars are staying in the parking lot for the night:\n");
    for (int index = 0; index <= m_front; index++)
    {
        printf("%-11s%-11d\n", m_Lot[index]->get_model(), m_Lot[index]->get_ID());
    }
}

感谢您的帮助, 瑞舍夫

0 个答案:

没有答案