ошибка доступа при работе с абстрактным классом

При вызове метода get_ApartInfo() в классе ApartAgency выходит исключение Скрин исключения Как сделать так, чтобы нормально работал метод?

1. Есть абстрактный класс

class Apartments
{
public:
    string name;
    string address;
    double price = 0;
public:
    virtual void get_info() = 0;
}; 

2. Есть класс наследник

class Home : public Apartments
{
public:
    int floors;
public:
    void get_info() {
        cout << "\n Название недвижимости: " << name;
        cout << "\n Адрес: " << address;
        cout << "\n Цена: " << price;
        cout << "\n Количество этажей: " << floors;
    }
    Home(string nam) {
        cout << "\n Кол-во этажей: ";
        cin >> floors;
        name = nam;
        cout << "\n Адрес: ";
        cin >> address;
        cout << "\n Цена: ";
        cin >> price;
    }
};

3. И есть класс задача которого создать список недвижимости

class ApartAgency
{
public:
    int len;
    int num = 0;
    Apartments** a;
    string n;
public:
    void add_a() {
        cout << "\n Какой тип недвижимости добавить - ";
        cin >> n;
        if (n == "home") {
            Home h(n);
            a[num] = &h;
        }
        if (n == "quarter") {
            Quarter q(n);
            a[num] = &q;
        }
        num++;
    }
    void get_ApartInfo() {
        cout << "\n Список всей недвижимости:";
        for (int i = 0; i < len; i++) {
            a[i]->get_info();
        }
    }
    ApartAgency(int n) {
        len = n;
        a = new Apartments * [n];
        for (int i = 0; i < len; i++) {
            a[i] = 0;
        }
    }
};

4) Минимальный код для теста

#include <iostream>
#include <string>
using namespace std;

class Apartments
{
public:
    string name;
public:
    virtual void get_info() = 0;
};

class Home : public Apartments
{
public:
    int floors;
public:
    void get_info() {
        cout << "\n Название недвижимости: " << name;
        cout << "\n Количество этажей: " << floors;
    }
    Home(string nam) {
        cout << "\n Кол-во этажей: ";
        cin >> floors;
        name = nam;
    }
};

class Quarter : public Apartments
{
public:
    int rooms;
public:
    void get_info() {
        cout << "\n Название недвижимости: " << name;
        cout << "\n Количество комнат: " << rooms;
    }
    Quarter(string nam) {
        cout << "\n Кол-во комнат: ";
        cin >> rooms;
        name = nam;
    }
};

class ApartAgency
{
public:
    int len;
    int num = 0;
    Apartments** a;
    string n;
public:
    void add_a() {
        if ((num + 1) > len) {
            cout << "\n Список полн!";
            return;
        }
        cout << "\n Какой тип недвижимости добавить - ";
        cin >> n;
        if (n == "home") {
            Home h(n);
            a[num] = &h;
        }
        if (n == "quarter") {
            Quarter q(n);
            a[num] = &q;
        }
        num++;
    }
    void del_a() {
        if ((num - 1) < 0) {
            cout << "\n Список пуст!";
            return;
        }
        num--;
        a[num] = 0;
    }
    void get_ApartInfo() {
        if (num == 0) {
            cout << "\n Список пуст!";
            return;
        }
        cout << "\n Список всей недвижимости:";
        for (int i = 0; i < len; i++) {
            cout << "\n--------------------------------------------------------------------------------";
            a[i]->get_info();
        }
        cout << "\n--------------------------------------------------------------------------------";
    }
    ApartAgency(int n) {
        len = n;
        a = new Apartments * [n];
        for (int i = 0; i < len; i++) {
            a[i] = 0;
        }
    }
};

int main()
{
    setlocale(LC_ALL, "RU");
    int number;
    cout << "Количество объектов - ";
    cin >> number;
    ApartAgency aa(number);
    string flag;
    while (flag != "end") {
        flag = " ";
        cout << "\n\"+\" - добавить объект" << "\n\"-\" - удалить объект" << "\n\"price_search\" - искать по цене" << "\n\"get_info\" - вывести инфо по объектам" << "\n\"end\" - завершить редактирование\n";
        cin >> flag;
        if (flag == "end")
        {
            aa.get_ApartInfo();
            break;
        }
        if (flag == "+")
        {
            aa.add_a();
        }
        if (flag == "-")
        {
            aa.del_a();
        }
        if (flag == "get_info")
        {
            aa.get_ApartInfo();
        }
    }
}

Ответы (0 шт):