Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.03.2023, 14:18   #1
_*ViLkA*_
Пользователь
 
Регистрация: 19.03.2023
Сообщений: 10
По умолчанию Класс многоквартирый дом

//Выдаёт ошибку при вводе данных жильцов.Подскажите пожалуйста,в чём здесь ошибка?
Код:
#include <iostream>
#include <string>
#include <Windows.h>
#include< stdlib.h >
#include <conio.h>
 
using namespace std;
 
class Person
{
private:
 
    string FIO;
    string phone;
 
public:
 
    Person()
    {
        FIO = "";
        phone = "";
        
    }
 
    Person(char* fio, int p) // конструктор с параметрами
    {
        FIO = fio;
        phone = p;
    }
 
    void addPerson() // добавить жильца
    {
        cout << "ФИО : ";
        cin >> FIO;
        cout << endl;
 
        cout << "Телефон : ";
        cin >> phone;
        cout << endl;
 
        cout << "Жилец добавлен!" << endl << endl;
    }
 
    void showPerson() // показать жильца
    {
        cout << "ФИО : " << FIO << endl;
        cout << "Телефон : " << phone << endl << endl;
    }
 
    void deletPerson() // удалить жильца
    {
        string f;
 
        cout << "Введите имя для удаления жильца : ";
        cin >> f;
        cout << endl;
 
        if (f == FIO)
        {
            FIO = "";
            phone = "";
        }
 
        cout << "Жилец удалён!" << endl << endl;
    }
};
 
class Flat
{
private:
    
    string numFlat;
    int size;
 
public:
 
    Person* p;
 
    Flat()
    {
        numFlat = "";
        size = 0;
    }
 
    Flat(string nF, int s)
    {
        numFlat = nF;
        size = s;
        p = new Person[size];
    }
 
    void addFlat(string nF)
    {
        cout << "Введите номер квартиры : ";
        cin >> nF;
        cout << endl;
    }
 
    ~Flat()
    {
        delete[] p;
    }
};
 
class House
{
private:
 
    int numFlat;
    string nameHouse;
 
public:
 
    Flat* f;
 
    House(int nF, string nH)
    {
        numFlat = nF;
        nameHouse = nH;
        f = new Flat[numFlat];
    }
 
    void showHouse()
    {
        cout << "Создан многоквартирный дом " << nameHouse << " на " << numFlat << " квартир" << endl << endl;
    }
 
    ~House()
    {
        delete[] f;
    }
};
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    setlocale(LC_ALL, "Rus");
 
    int q = 0;
    int n = 0;
 
    string nameHouse = "";
    cout << "Введите название дома : ";
    cin >> nameHouse;
    cout << endl;
 
    int numFlat = 0;
    cout << "Введите количество квартир : ";
    cin >> numFlat;
    cout << endl;
 
    House h(numFlat, nameHouse);
    h.showHouse();
 
 
    int userCoise = 0;
    bool menu = true;
 
    do
    {
        cout << "1.Добавить жильца;" << endl;
        cout << "2.Удалить жильца;" << endl;
        cout << "3.Показать жильцов;" << endl;
        cout << "4.Выход." << endl;
        cin >> userCoise;
        system("cls");
 
        switch (userCoise)
        {
        case 1:
        {
            cout << "В какую квартиру хотите добавить жильца? ";
            cin >> q;
            cout << endl;
 
            while (q > numFlat || q < 0)
            {
                cout << "Неверный номер квартиры!Попробуйте ещё раз! " << endl;
 
                cout << "В какую квартиру хотите добавить жильца? ";
                cin >> q;
                cout << endl;
            }
            q--;
 
            h.f[q].p[n].addPerson();
            n++;
        }
        break;
 
        case 2:
        {
            if (n == 0)
            {
                cout << "В доме нет жильцов!" << endl;
            }
 
            else
            {
                for (int j = 0; j < numFlat; j++)
                    for (int i = 0; i < n; i++)
                    {
                        h.f[j].p[i].deletPerson();
                    }
            }
        }
        break;
 
        case 3:
        {
            if (n == 0)
            {
                cout << "В доме нет жильцов!" << endl;
            }
 
            else
            {
                for(int j = 0; j < numFlat; j++)
                    for (int i = 0; i < n; i++)
                    {
                        h.f[j].p[i].showPerson();
                    }
            }
        }
        break;
 
        case 4:
        {
            menu = false;
        }
        break;
        }
 
    } while (menu);
 
}
_*ViLkA*_ вне форума Ответить с цитированием
Старый 19.03.2023, 14:43   #2
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

1) Проверку количества квартир надо бы сделать методом у House
2) При создании дома вы инициализируете квартиры через конструктор по умолчанию, а в нем не создаётся массив жильцов. Поэтому обращение к
Цитата:
h.f[q].p[n].addPerson();
выдаёт ошибку т.к. p - не задан (равен nullptr)
3) У вас индексы n считаются не для отдельной квартиры, а для всего дома. Хотя в классах у вас n должны задаваться относительно квартиры.

Последний раз редактировалось macomics; 19.03.2023 в 14:53.
macomics вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Построить класс треугольник и на его основе создать класс параллелограмм, используя механизм наследования smail-2017@list.ru Помощь студентам 0 24.12.2019 14:04
Создание классов - Имеется класс город. Класс область содержит массив городов. Класс область содержит метод, который осуществляет поиск города по его названию. martofpain C# (си шарп) 5 23.12.2019 07:57
Нужно сделать наследование классов, 1 класс находится первой форме, 2 класс во второй. Вероника99 Помощь студентам 3 29.04.2016 23:02
Добавить класс в проект2,похожий на класс из проекта1!оба проекта есть! xeops C# (си шарп) 0 15.05.2012 20:31
Класс запускает поток, который заполняет этот класс. Обмен класс <=> поток. Человек_Борща Общие вопросы Delphi 8 27.02.2012 23:24