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

Структуры заменить на классы - C++

Восстановить пароль Регистрация
 
Xin4
0 / 0 / 0
Регистрация: 26.03.2009
Сообщений: 10
20.05.2009, 10:01     Структуры заменить на классы #1
Дана программа, выдающая список дамской обуви и ассортимент обуви нужного артикула. Сведения берутся из файла "READ.DAT"

Код программы:
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
#include<fstream.h>
#include<string.h>
#include<stdlib.h>
#include<conio.h>
 
typedef char* pchar;
 
struct Shoose 
{
        char artikul[5]; 
        char name[11];   
        int number;      
        float price;  
};
 
int main()
{
const int max_records = 4; //Максимальное количество записей
Shoose sh[max_records];    //Массив структур - записей
ofstream out_f;            //Поток out_f типа потока ввода в файл
ifstream in_f;             //Поток in_f типа потока чтения из файла
pchar name_f = "D:\\READ.DAT";
 
//Промежуточные переменные для записи в файл вводимой с клавиатуры информации
char artikul[5], name[11]; 
int number, i, fl;        
float price;
 
clrscr();
//Открываем файл READ.DAT для ввода информации
in_f.open(name_f);
if (in_f.fail()) //проверяем нет ли ошибки открытия
   {cout << "Ошибка записи! \n"; exit(1);}
else cout << "Открытие файла: Файл открыт! \n\n";
//Читаем файл и заполняем массив объектов структуры Shoose
for (i=0; i<max_records; ++i)
   in_f>>sh[i].artikul>>sh[i].name
       >>sh[i].number>>sh[i].price;
//Закрываем файл READ.DAT для вывода информации
in_f.close();
//Список дамской обуви
cout<< "Список дамской обуви: \n";
for (i=0; i<max_records; ++i)
  {
  if(sh[1].artikul[0]=='w' || sh[i].artikul[0]=='W')
     cout<<sh[i].name<<" - "<<sh[i].number
     <<" пар(ы) по цене "<<sh[i].price<<" руб.\n";
  }
 
//список обуви определенного артикула
cout<<"Введите интересующий вас артикул: ";
cin>>artikul;
for (i=0; i<max_records; ++i)
  {
  if (!strncmp(sh[i].artikul, artikul, 4))
    cout<<sh[i].name<<" -- "<<sh[i].number
    <<" пар(ы) по цене "<<sh[i].price<<"руб.\n";
  }
  return 0;
}
Вот сам файл READ:
Код
W111 Сапоги 12 2000
M112 Ботинки 13 1500
W113 Туфли 14 500
C114 Сандали 15 400
Нужно переделать данную программу: разбить ее на функции, заменить СТРУКТУРЫ КЛАССАМИ, сделать конструктор..
Вот собственно начало:
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
#include<fstream.h>
#include<string.h>
#include<stdlib.h>
#include<conio.h>
 
typedef char* pchar;
 
class Shoose 
{
   private:
        char artikul[5]; 
        char name[11];
        int number;      
        float price;
   public:
        Shoose();
                
};
 
Shoose::Shoose()
   {
   number=0;
   price=0;
   artikul[0]='\0';
   name[0]='\0';
   }
Был бы очень признателен за помощь!)))
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
RazorQ
 Аватар для RazorQ
576 / 343 / 9
Регистрация: 06.02.2009
Сообщений: 1,386
20.05.2009, 10:18     Структуры заменить на классы #2
Вот класс
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
class Shoose 
{
      private:
            char artikul[5]; 
            char name[11];   
            int number;      
            float price;  
    public:
           Shoose(); // конструктор по умолчанию
           char *getartikul(){return artikul;} // функции для возврата значений
           char *getname(){return name;}
           int getnumber(){return number;}
           float getprice(){return price;}
           void setartikul(char art[]){       // функции для установки значений
                for(int i=0; i<5; i++)
                   artikul[i] = art[i];
                   } 
           void setname(char nm[]){
                for(int i=0; i<5; i++)
                   name[i] = nm[i];
                   }
           void setnumber(int num){number = num;}
           void setprice(float pr){price = pr;}
           
};
Xin4
0 / 0 / 0
Регистрация: 26.03.2009
Сообщений: 10
20.05.2009, 21:44  [ТС]     Структуры заменить на классы #3
RazorQ, спасибо) дополнил код программы, теперь она выглядит так:

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
75
76
77
78
#include<fstream.h>
#include<string.h>
#include<stdlib.h>
#include<conio.h>
 
typedef char* pchar;
 
class Shoose
{
    private:
            char artikul[5]; 
            char name[11];   
            int number;      
            float price;  
    public:
            Shoose(); // конструктор по умолчанию
            char *getartikul(){return artikul;} // функции для возврата значений
            char *getname(){return name;}
            int getnumber(){return number;}
            float getprice(){return price;}
            void setartikul(char art[]){       // функции для установки значений
                    for(int i=0; i<5; i++)
                      artikul[i] = art[i];
                                       } 
            void setname(char nm[]){
                    for(int i=0; i<5; i++)
                      name[i] = nm[i];
                                   }
            void setnumber(int num){number = num;}
            void setprice(float pr){price = pr;}
                   
};
   
int main()
{
const int max_records = 4; //Максимальное количество записей
Shoose sh[max_records];    //Массив структур - записей
ofstream out_f;            //Поток out_f типа потока ввода в файл
ifstream in_f;             //Поток in_f типа потока чтения из файла
pchar name_f = "D:\\output\\READ.DAT";
 
//Промежуточные переменные для записи в файл вводимой с клавиатуры информации
char art[5], nm[11]; 
int num, i, fl;        
float pr;
 
clrscr();
//Открываем полученный файл READ.DAT для ввода информации
in_f.open(name_f);
if (in_f.fail()) //проверяем нет ли ошибки открытия
   {cout << "Ошибка записи! \n"; exit(1);}
else cout << "Открытие файла: Файл открыт! \n\n";
//Читаем файл и заполняем массив объектов структуры Shoose
for (i=0; i<max_records; ++i)
   in_f>>sh[i].art>>sh[i].nm
       >>sh[i].num>>sh[i].pr;
//Закрываем файл READ.DAT для вывода информации
in_f.close();
//Список дамской обуви
cout<< "Список дамской обуви: \n";
for (i=0; i<max_records; ++i)
  {
  if(sh[1].art[0]=='w' || sh[i].art[0]=='W')
     cout<<sh[i].nm<<" - "<<sh[i].num
     <<" пар(ы) по цене "<<sh[i].pr<<" руб.\n";
  }
 
//список обуви определенного артикула
cout<<"Введите интересующий вас артикул: ";
cin>>art;
for (i=0; i<max_records; ++i)
  {
  if (!strncmp(sh[i].art, art, 4))
    cout<<sh[i].nm<<" -- "<<sh[i].num
    <<" пар(ы) по цене "<<sh[i].pr<<"руб.\n";
  }
  return 0;
}
но компилятор выдает ошибку..
Function containing for are not expanded inline
Haster
инженер-системотехник
 Аватар для Haster
109 / 108 / 2
Регистрация: 10.03.2009
Сообщений: 533
20.05.2009, 22:18     Структуры заменить на классы #4
Косяки в строках 56-57,64-66, 74-76.
ННапример в строках 56-57,
C++
1
2
3
for (i=0; i<max_records; ++i)
   in_f>>sh[i].art>>sh[i].nm
       >>sh[i].num>>sh[i].pr;
в классе у тебя нет членов art, nm, num, а есть только artikul, name, number.
Но даже при исправлении работать не будет, т.к. эти члены закрытые, и к ним нужно обращаться с помощью методов класса, а не на прямую
Ёрик
46 / 46 / 2
Регистрация: 07.01.2009
Сообщений: 298
20.05.2009, 22:22     Структуры заменить на классы #5
Ошибка такая,что не может компилятор функцию сделать in-line.
Возможно,эти функции нельзя сделать in-line,описывайте их в cpp:
void setartikul(char art[]){ // функции для установки значений
for(int i=0; i<5; i++)
artikul[i] = art[i];
}
void setname(char nm[]){
for(int i=0; i<5; i++)
name[i] = nm[i];
Заодно проверьте и напишите, в какой строчке ошибка,чтобы не гадать.
Xin4
0 / 0 / 0
Регистрация: 26.03.2009
Сообщений: 10
20.05.2009, 23:04  [ТС]     Структуры заменить на классы #6
Переписал..
Ошибка "Function containing for are not expanded inline" выходит на той же строке что и выходила, на 23.
Ёрик
46 / 46 / 2
Регистрация: 07.01.2009
Сообщений: 298
20.05.2009, 23:18     Структуры заменить на классы #7
Такой ошибки у меня нет(скомпилировал Вашу программу). Уменя только ошибки, про которые говорил Haster. откуда вы взяли члены art, nm, num?

Нужно писать фукнции get к каждому члену. Короче, не буду дублировать сообщение Haster, все у него написано.
RazorQ
 Аватар для RazorQ
576 / 343 / 9
Регистрация: 06.02.2009
Сообщений: 1,386
21.05.2009, 08:42     Структуры заменить на классы #8
Структура - не класс. Я же написал функции доступа, вот через них и задавай значения или считывай. Тут в целом программу можно переписать
DEM90
17 / 17 / 1
Регистрация: 06.05.2009
Сообщений: 115
21.05.2009, 08:47     Структуры заменить на классы #9
Но если не хочешь чере функции обращаться к закрытам членам класса, то объяви
C++
1
2
3
4
            char artikul[5]; 
            char name[11];   
            int number;      
            float price;
после public:
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.05.2009, 09:55     Структуры заменить на классы
Еще ссылки по теме:

классы и структуры C++
C++ Классы и структуры в С++
C++ Заменить string на char* классы
Зачем нужны классы и структуры? C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Xin4
0 / 0 / 0
Регистрация: 26.03.2009
Сообщений: 10
21.05.2009, 09:55  [ТС]     Структуры заменить на классы #10
Всем спасибо, разобрался!)))
Yandex
Объявления
21.05.2009, 09:55     Структуры заменить на классы
Ответ Создать тему
Опции темы

Текущее время: 00:25. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru