Форум программистов, компьютерный форум CyberForum.ru

Класс домов и класс улиц для учета поступлений квартплаты. Массив - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Решение головоломок http://www.cyberforum.ru/cpp-beginners/thread848821.html
Скажи пожалуйста, как должна работать программа, решающая головомку: составить, например, функцию проверки окончания и прогонять все варианты или не знаю, пробывать составить какое-то дерево ходов или мыслить так же как решает человек Хочу написать решатель для головоломки Первые встречные http://www.cross-plus-a.ru/html/voc7abc.htm
C++ Изменение цвета текста Привет всем. Можно ли в консоле менять цвет ЧАСТИ текста? тоесть выделить одно слово другим цветом например Просто system(color ** ) изменяет всё целиком. В нэте не нашёл нормального ответа на мой вопрос http://www.cyberforum.ru/cpp-beginners/thread848819.html
C++ Операции над натуральными числами
Привет всем, я новенький как на форуме так и на в программировании. Начал изучать с++ 2 недели назад,самоучка, так что сильно не кричите)) Задача : Даны три натуральных числа K,L,M (K>=L>=M). Если хотя бы одно из них кратно любому другому, оставить числа без изменения. В противном случае умножить все числа на меньшее из них. #include "iostream" using namespace std;
C++ Класс, динамический массив строк
Здравствуй, пользователь. Сегодня, наконец выбравшись из рид онли и пройдя процесс регистрация, я спешу попросить тебя о помощи. Что я имею? Задание: Создать класс, включающий в себя динамический массив строк. Создать методы работы с массивом, а именно: добавить строку в конец\начало, удалить строку из конца\начала. Причём код должен быть сделан следующим образом: в мейне инициализация и...
C++ Оформить в виде функции http://www.cyberforum.ru/cpp-beginners/thread848795.html
Оформить каждый пункт задания в виде функции. Все необходимые данные для функций должны передаваться им в качестве параметров. Использование глобальных переменных в функциях не допускается. #include "stdafx.h" #include <iostream> #include "conio.h" #include "math.h" #include "windows.h" using namespace std; int **mas, n, m, i,j, y, temp;
C++ Преобразование списка адресов Возникли трудности, не могу решить задачу с переводом адресов в числа. Есть файл с таким содержанием: (данные разделены пробелами, я для наглядности по столбцам разбила) (Из файла надо считать данные) yandex.ru www.cyberforum.ru 3 google.ru yandex.ru 7 mail.ru www.cyberforum.ru 10... подробнее

Показать сообщение отдельно
lemegeton
 Аватар для lemegeton
2909 / 1338 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
26.04.2013, 18:41     Класс домов и класс улиц для учета поступлений квартплаты. Массив
Цитата Сообщение от kukhtikov Посмотреть сообщение
7. В качестве технологических классов можно выделить классы: список (List).
Не то задание выложил?
Какие еще отличия?

Добавлено через 2 часа 36 минут
Вы печально забили отвечать на мой вопрос, но не постеснялись написать в личку.

Ну, разделять классы на заголовок и тело вы умеете сами, поэтому я этого делать не буду. Мне лень.

Именовать методы, классы и свойства как в методичке мне тоже лень, да и никто на это смотреть не будет.

Давайте есть слона по-частям.

Первый класс, сущность "здание" у вас есть. Я взял на себя смелость его немного переписать "под себя", чтобы проще было. Вывод тоже заточен "под меня", можете исправить как вам нравится.
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
class Building {
 public:
  Building() : number() {}
  Building(int number, int numberOfApartments, int numberOfResidents,
    int numberOfStoreys) : number(number),
    numberOfApartments(numberOfApartments),
    numberOfResidents(numberOfResidents),
    numberOfStoreys(numberOfStoreys) {}
  virtual ~Building() {}
  
  int getNumber() const { return number; }
  int getNumberOfApartments() const { return numberOfApartments; }
  int getNumberOfResidents() const { return numberOfResidents; }
  int getNumberOfStoreys() const { return numberOfStoreys; }
  
  void setNumber(int number) {
    this->number = number;
  }
  void setNumberOfApartments(int numberOfApartments) {
    this->numberOfApartments = numberOfApartments;
  }
  void setNumberOfResidents(int numberOfResidents) {
    this->numberOfResidents = numberOfResidents;
  }
  void setNumberOfStoreys(int numberOfStoreys) {
    this->numberOfStoreys = numberOfStoreys;
  }
 private:
  int number;
  int numberOfApartments;
  int numberOfResidents;
  int numberOfStoreys;
};
 
std::ostream &operator<<(std::ostream &stream, const Building &building) {
  return stream << "Building{" <<
    "number=" << building.getNumber() << "," <<
    "numberOfApartments=" << building.getNumberOfApartments() << "," <<
    "numberOfResidents=" << building.getNumberOfResidents() << "," <<
    "numberOfStoreys=" << building.getNumberOfStoreys() << "}";
}


Едем дальше по методичке.
Цитата Сообщение от kukhtikov Посмотреть сообщение
В каждом задании на ДЗ требуется создать минимум один контейнерный класс.
Требуется создать контейнерный класс. Ок. Сделаем контейнерный класс зданий.
Если вам нужен более "навороченый" контейнер, позволяющий хранить что угодно, можно взять стандартный std::vector или любой понравившийся велосипед с форума.

Значит сущность на основе массива, хранящая здания (и только здания).
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
class BuildingList {
 public:
  BuildingList() : capacity(10), size(0), data(new Building[capacity]) {}
  BuildingList(const BuildingList &other) : capacity(0), size(0), data(0) {
    copyFrom(other);
  }
  virtual ~BuildingList() { delete [] data; }
  BuildingList &operator=(const BuildingList &other) {
    return copyFrom(other);
  }
  BuildingList &copyFrom(const BuildingList &other) {
    if (this != &other) {
      delete [] data;
      size = other.getSize();
      capacity = other.getCapacity();
      data = new Building[size];
      for (unsigned int i = 0; i < size; ++i) {
        data[i] = other.data[i];
      }
    }
    return *this;
  }
  void insert(unsigned int position, const Building &building) {
    checkCapacity();
    for (Building *i = data + size; i != data + position; --i) {
      *i = *(i - 1);
    }
    data[position] = building;
    ++size;
  }
  void remove(unsigned int position) {
    for (Building *i = data + position; i != data + size - 1; ++i) {
      *i = *(i + 1);
    }
    --size;
  }
  Building &operator[](unsigned int position) {
    return data[position];
  }
  const Building &operator[](unsigned int position) const {
    return data[position];
  }
  unsigned int getSize() const { return size; }
  unsigned int getCapacity() const { return capacity; }
 private:
  void checkCapacity() {
    if (size >= capacity - 1) {
      capacity += 10;
      Building *newData = new Building[capacity];
      for (unsigned int i = 0; i < size; ++i) {
        newData[i] = data[i];
      }
      delete [] data;
      data = newData;
    }
  }
  unsigned int capacity;
  unsigned int size;
  Building *data;
};


Добавлено через 3 минуты
Теперь самая мякота. Композитный класс улицы, включающий в себя сущность-список домов. Тоже сразу со вспомогательной функцией и оператором вывода на экран.

В общем-то обычный класс, у которого есть объект buildings, класса, описанного выше. Методы "контейнера" класс улицы подменяет своими, осмысленными.

Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
// вспомогательная функция для копирования строки,
// чтобы не включать громоздкий cstring
char *strcpy(char *destination, const char *source) {
  char *result = destination;
  do {
    *destination++ = *source++;
  } while (*source);  
  return result;
}
 
class Street {
 public:
  Street() {
    name[0] = '\0';
  }
  Street(const char *name) {
    strcpy(this->name, name);
  }
  virtual ~Street() {}
  const char *getName() const { return name; }
  void setName(const char *name) { strcpy(this->name, name); }
 
  // методы, связанные со зданиями:
  unsigned int getNumberOfBuildings() const { return buildings.getSize(); }
  Building &getBuilding(unsigned int position) {
    return buildings[position];
  }
  const Building &getBuilding(unsigned int position) const {
    return buildings[position];
  }
  void addBuilding(const Building &building) {
    buildings.insert(buildings.getSize(), building);
  }
  void addBuilding(unsigned int position, const Building &building) {
    buildings.insert(position, building);
  }
 
  // методы-аггрегаты для вычисляемых свойств класса
  unsigned int getNumberOfResidents() const {
    unsigned int result = 0;
    for (unsigned int i = 0; i < getNumberOfBuildings(); ++i) {
      result += getBuilding(i).getNumberOfResidents();
    }
    return result;
  }
  unsigned int getNumberOfApartments() const {
    unsigned int result = 0;
    for (unsigned int i = 0; i < getNumberOfBuildings(); ++i) {
      result += getBuilding(i).getNumberOfApartments();
    }
    return result;
  }
 private:
  char name[30];
  BuildingList buildings;
};
 
std::ostream &operator<<(std::ostream &stream, const Street &street) {
  stream << "Street{" <<
    "name='" << street.getName() << "'," <<
    "numberOfApartments=" << street.getNumberOfApartments() << "," <<
    "numberOfResidents=" << street.getNumberOfResidents() << "," <<
    "numberOfNuildings=" << street.getNumberOfBuildings() << "," <<
    "buildings=[";
  if (street.getNumberOfBuildings() > 0) {
    for (unsigned int i = 0; i < street.getNumberOfBuildings(); ++i) {
      stream << std::endl << " " << street.getBuilding(i);
      if (i + 1 < street.getNumberOfBuildings()) {
        stream << ",";
      }
    }
  }
  return stream << "]}";
}
 
Текущее время: 06:00. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru