ошибка доступа при работе с абстрактным классом
При вызове метода 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();
}
}
}