@igoodmood

Как правильно организовать структуру в классе?

Здравствуйте! Нужно создать программу, которая будет служить эмулятором кассового аппарата. Как я понял, нужно использовать структуру. Но так как я изучаю ООП, это нужно сделать в классе. Пытался реализовать разными вариантами, создавая указатели и тому подобное, но успеха не наблюдалось. В интернете тоже информации на данную тему очень мало. Поэтому пишу здесь для того чтобы разобраться в реализации.
Вот сама ошибка:
6022b3d3995145889af54b0c578cb122.PNG
Вот код на данный момент : (это файл check.h)
#pragma once
#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;
class check
{
public:
	void create(double *&numbers, string name_goods, double prises, int numbers_of_once)
	{
		numbers = new double[n];
		int p = 0;
		for (int i = 1; i <= n; i++)
		{
			while (p != n)
			{
				int g = 0;
				cout << "1 - Milk, 2 - Potatoes, 3 - Chocolate, 4 - Sugar, 5 - Bread, 6 - Water, 7 -  Magazine" << endl;
				cout << "Enter" << i << "product of list:";
				cin >> g;
				switch (g)
				{
				case 1:
					numbers[i].name_goods;
					break;
		
				default:
					cout << "Enter the number from 1 to 7!" << endl;
					break;
				}
			}
		}
	}
private:
	int n = 5;
	struct Check
	{
		string name_goods;
		double prises;
		int numbers_of_once;
	};
};
Так же есть файл .срр, но там только подключенные директивы и пространство имен, не считая названия класса и его объекта. Очень надеюсь на Вашу помощь)
  • Вопрос задан
  • 945 просмотров
Решения вопроса 1
@Mercury13
Программист на «си с крестами» и не только
Помимо того, что я написал…

1. Как устроить данные?
struct CheckLine {
public:
   int itemCode;    // код товара
   int qty;         // количество
   int price;       // цена, по которой всё это продано в копейках
   const CheckLine* next() const { return _next; }
private:
   friend class Check;   // я тут ошибся с const-корректностью и заconst’ив всё, что можно, не дал Check’у писать
   CheckLine* _next;
}

class Check {
public:
    Check() : _firstLine(NULL), _lastLine(NULL) {}
    void addLine(int itemCode, int qty, int price);   // пиши реализацию сам.
    const CheckLine* firstLine() const { return _firstLine; }
    ~Check();  // не забудь про деструктор…
    Check(const Check&)  // …конструктор копирования…
    Check& operator = (const Check&);  // и операцию «присвоить».
private:
    CheckLine *_firstLine, *_lastLine;
}

В общем, я тут для простоты (мы же пока не знаем, что такое vector) наладил хранение данных связанным списком.

2. Во внутренней кухне класса ты обращаешься к консоли. Зачем? Обычно это делают как можно ближе к main.

Вернусь — буду писать дальше.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@abcd0x00
Нужно создать программу, которая будет служить эмулятором кассового аппарата.

Ты должен сначала описать наружнюю составляющую этого аппарата.

Типа
начать работу
нажать кнопку один
нажать кнопку два
повернуть ручку такую-то
повернуть ручку другую-то
показать на экране текущее состояние
кончить работу

Это внешнее описание аппарата.

Вот это твой класс должен реализовывать - представлять из себя такую коробку с методами. А вот внутри уже у тебя хранятся какие-то данные, введённые в аппарат или полученные им внутри при вызове методов снаружи.

Введённые продукты добавляются в список продуктов, который скрыт от наружнего наблюдателя, но который виден внутри аппарата. Всё управление аппаратом происходит через его внешние методы (через интерфейс).
Ответ написан
Комментировать
@chichackles
По основному вопросу: А зачем? Структура внутри класса - это дополнительный уровень вложенности. Какой в нём смысл. С точки зрения данных сам класс и есть фактически структура. Пиши поля структуры как поля класса да и всё.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы