1

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

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

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

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

struct Properties_type *list;

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

1 Answers1

2

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;
}
AlexIdest
  • 722
  • Почему MyClass - это структура? Мне нужно создать структуру внутри класса. – Елизавета Dec 27 '18 at 18:24
  • @Елизавета MyClass - это структура потому что мы задали этот тип так в строке struct MyClass. Можно было написать struct MyStruct. Ничего бы не изменилось. – AlexIdest Dec 27 '18 at 18:26
  • Как создать структуру внутри класса? – Елизавета Dec 27 '18 at 18:29
  • @LLENN, это не главная задача этой программы. Мне важно понять как создать динамический массив структур в классе и иметь к нему доступ. – Елизавета Dec 27 '18 at 18:31
  • class Product { string name_of_product; int amount_of_measurable_values; struct Properties_type *list; bool turn_on__off; bool serviceability; public: struct Properties_type { string name_of_measurable_value; float lower_bound; float upper_bound; float error; } Properties; – Елизавета Dec 27 '18 at 18:31
  • @Елизавета что конкретно Вам не понятно? Нужно создать массив в котором будут объекты Вашей структуры? Если да, то я показал как можно это осуществить. – AlexIdest Dec 27 '18 at 18:35
  • Согласно моему заданию, нужно создать класс устройство с полями название устройства, количество измеряемых величин, а свойства величин - это, если я правильно понимаю структура с полями название величины, верхняя/нижняя граница, погрешность. Так как измеряемых величин у одного устройства может быть несколько, нужно создать динамический массив структур, так как кол-во измеряемых величин у одного устройства задает пользователь. – Елизавета Dec 27 '18 at 18:42
  • @Елизавета можно всё это уместить в один класс(он же структура с конструкторами и методами как в ответе). В тело struct помещаем поля(свойства величин) и возможно необходимые методы(методы==ф-ии для класса). Для начала рекомендую Вам ознакомиться подробнее с ООП, понятием структур и классов – AlexIdest Dec 27 '18 at 18:45
  • Мне непонятно 1) как создать структуру внутри класса 2) как организовать к ней доступ из вне. Например конструктор по умолчанию создает устройство с двумя величинами (массив структуры с двумя элементами) как мне организовать вывод на экран информации? – Елизавета Dec 27 '18 at 18:47
  • Если я правильно Вас поняла, в ООП структура - это и есть класс? – Елизавета Dec 27 '18 at 18:49
  • 1
    @Елизавета: Отличие структуры от класса лишь в том, что у структуры по умолчанию все поля/методы имеют модификатор доступа public, в то время как в классе private. Более они ничем не отличаются. –  Dec 27 '18 at 18:51
  • @Елизавета такие вопросы гуглу или учебнику. Это основы ООП https://www.google.com/search?client=ubuntu&channel=fs&q=%D0%9E%D0%9E%D0%9F+%D1%81%2B%2B&ie=utf-8&oe=utf-8 – AlexIdest Dec 27 '18 at 18:55
  • @LLENN , спасибо. Мне нужно создать именно класс, где как я думала будет вложенная структура. А можно в классе создать вложенный класс? – Елизавета Dec 27 '18 at 18:56
  • Можете, пожалуйста, посоветовать хороший учебник по ООП. – Елизавета Dec 27 '18 at 18:57
  • @Елизавета вот здесь более опытные программисты уже собрали много-много литературы https://ru.stackoverflow.com/questions/454263/%d0%9a%d0%bd%d0%b8%d0%b3%d0%b8-%d0%b8-%d1%83%d1%87%d0%b5%d0%b1%d0%bd%d1%8b%d0%b5-%d1%80%d0%b5%d1%81%d1%83%d1%80%d1%81%d1%8b-%d0%bf%d0%be-%d0%a1 – AlexIdest Dec 27 '18 at 18:59
  • @AlexIdest, спасибо. – Елизавета Dec 27 '18 at 18:59
  • Елизавета, например Гради Буч читайте – AR Hovsepyan Dec 27 '18 at 19:02