массив структур в классе c++

140
10 июля 2019, 06:20

Подскажите, пожалуйста, как реализовать поставленную задачу. "Завод выпускает разные измерительные приборы. Каждый прибор может характеризоваться такими данными как: - наименование прибора; - Каждый прибор может измерять несколько величин, каждая из которых характеризуется: а) названием величины; б) верхняя/нижняя граница; в) погрешность измерения. -состоянием прибора (включен/выключен; исправен/неисправен). Задание создать класс прибор, предусмотреть конструктор, методы изменения и получения данных о приборе. Создать несколько объектов.

Я создаю структуру, в которой описаны свойства измеряемой величины

struct Properties_type {
            string name_of_measurable_value;
            float lower_bound;
            float upper_bound;
            float error;
        } Properties;

И создаю динамический массив структур, так как измеряемых величин у одного прибора может быть несколько, в зависимости от введенных пользователем данных

struct Properties_type *list;

как получить доступ к элементам этого массива для объекта класса. Пожалуйста, объясните как можно детальней работу со структурами в классе, если можно. Только начала изучать ООП. Спасибо!!!

Answer 1

1) Динамический массив структур так не создать.

struct Properties_type *list;

Надо примерно так:

int N = 5;
MyClass *obj = new MyClass[N];

2)Если Вы изучаете ООП, стоит узнать о том, что такое конструкторы, деструкторы, методы классов. Вот пример простейшего класса (класс и структура практически ничем не отличаются для Вашего этапа изучения).

3) Вот как-то так можно:

struct MyClass
{
  MyClass()//конструктор без аргументов
  {
    Value_ = 0;
  }
  MyClass(int Val)//конструктор от 1 агрумента
  {
    Value_ = Val;
  }
  void SetValue(int Val) //метод именуемый сеттером, им можно заполнить поле Value
  {
    Value_ = Val;
  }
  int GetValue(){ //метод возвращающий значение поля Value
    return Value_;
  }
  int Value_; //поле класса MyClass типа int
};
int main ()
{
  int N = 5;
  MyClass *obj = new MyClass[N]; //создание массива MyClass
  for (size_t i(0); i!=N;++i) //цикл для всех эл-ов массива типа MyClass
  {
    obj[i].SetValue(i);// вот здесь заполняем
  }
  for (size_t i(0); i!=N;++i) //цикл для вывода всех эл-ов массива типа MyClass
  {
    int temp = obj[i].GetValue(); // оператор точка даёт доступ к методам или
    // полям класса
    std::cout<<temp<<std::endl;
  }
  delete[] obj;
  return 0;
}

Запустите это в вашей среде и пройдитесь с помощью точек останова по всему коду. Так понять будет проще.

UPD1: Вот для конкретно Вашего примера без конструкторов и методов.

struct Properties_type
{
std::string name_of_measurable_value;
float lower_bound;
float upper_bound;
float error;
};
int main ()
{
  int N = 5;
  Properties_type *obj = new Properties_type[N];
  for (size_t i(0); i!=N;++i)
  {
    obj[i].lower_bound = 3; // вот здесь заполняйте как нужно
  }
  for (size_t i(0); i!=N;++i)
  {
    std::cout<<obj[i].lower_bound<<std::endl;
  }
  delete[] obj;
  return 0;
}
READ ALSO
Как укоротить сообщения об ошибках и предупреждения компилятора?

Как укоротить сообщения об ошибках и предупреждения компилятора?

Как укоротить сообщения об ошибках и предупреждения компилятора? Особенно при ошибках в шаблонах сначала идёт куча строк, в каком файле инстанциация...

154
could not initialize proxy - no Session (through reference chain: com.statistic.server.entity.Report$HibernateProxy$kjlzJLtW[&ldquo;date&rdquo;]

could not initialize proxy - no Session (through reference chain: com.statistic.server.entity.Report$HibernateProxy$kjlzJLtW[“date”]

После деплоя сервера при попытке получить JSON по адресу

143
Как применить размер шрифта к label?

Как применить размер шрифта к label?

Пишу программу на JavaFX и Scene Builder

126
Как открыть окно информации приложения

Как открыть окно информации приложения

ЗдравствуйтеКак открыть окно информации приложения зная пакет приложения или взяв его из переменной?Использую java в sketchware

121