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

Готовый код.Как перестроить структуру под класс.wxDex-C++ - C++

Восстановить пароль Регистрация
 
USHЁL
 Аватар для USHЁL
0 / 0 / 0
Регистрация: 15.11.2009
Сообщений: 93
06.07.2010, 17:09     Готовый код.Как перестроить структуру под класс.wxDex-C++ #1
Всем доброго вечера и хорошего настроения! Знатоки C/C++ подскажите как "переделать" готовую программку для использования её с классами.Есть код,в нем есть 2 версии функции setgolf,одна работает только с переменной структуры,другая работает и с переменной структуры и с вводом значений *char и int (Возможно снять комментарии и закоментировать другую версию функции,обе рабочие) :

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
79
80
//golf.h
#ifndef GOOLF_H_
#define GOLF_H_
using namespace std;
const int Len = 40;
struct golf
{
    char fullname[Len];
    int handicap;
};
void setgolf(golf & g,const char* name,int hc);
//int setgolf(golf & g);   //interaktivnaya versia
void handicap(golf & g,int hc);
void showgolf(const golf & g);
#endif
********************************
//golf.cpp
#include <iostream>
#include <string>
#include "golf.h"
void setgolf(golf & g,const char* name,int hc)
{
    strncpy(g.fullname,name,Len-1);
    g.fullname[Len-1] = '\0';
    g.handicap = hc;
}
 
/*int setgolf(golf & g) /// interaktivnaya versia
{
    int io,hnp;
    cout<<"Vvedite Vashe imya i handicap:\n";
    if(cin.get(g.fullname,Len))
     io = 1;
      else
       io = 0;
       cin.get();
       cin>>hnp;
       g.handicap = hnp;
       return io;
}*/
void handicap(golf & g,int hc)
{
    g.handicap = hc;
}
void showgolf(const golf & g)
{  
    cout<<"Name: "<<g.fullname<<endl;
    cout<<"Handicap: "<<g.handicap<<endl;
}
***********************************
#include <cstdlib>
#include <iostream>
#include "golf.h"
using namespace std;
 
int main(int argc, char *argv[])
{
    golf players[3];//massiv struct golf
    int i;
    char imya[Len];
    int hnd = 0;
    for(i=0;i<3;i++)
     {
       //cout<<"vozvrashaemoe znachenie(0 or 1): "<<setgolf(players[i])<<endl; //interaktivnaya versia
       cout<<"Vvedite Vashe imya i handicap:\n";
       cin.get(imya,Len);
       cin>>hnd;
       setgolf(players[i],imya,hnd);
       showgolf(players[i]);
       cout<<"Vvedite novoe znachenie handicap:\n";
       cin>>hnd;
       cin.get();
       handicap(players[i],hnd);
       showgolf(players[i]);
       cout<<endl;
    }
    
    system("PAUSE");
    return EXIT_SUCCESS;
}

Попробовал сделать,но не получается правильно определить интерактивную функцию setgolf она же golf:
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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
//golfobj.h
#ifndef GOOLF_H_
#define GOLF_H_
using namespace std;
const int Len = 40;
class golf
{
  private:
    char fullname[Len];
    int handicap;
  public:
   golf();
   golf(const char* name,int hc);
   int setgolf();// ?
   ~golf();
   void fhandicap(int hc);
   void showgolf() const;
};
#endif
***********************
 
//golf.cpp
#include <iostream>
#include <string>
#include "golfobj.h"
golf::golf()
{
    fullname[0] = '\0';
    handicap = 0;
}
 
/*golf::golf(const char * name,int hc)
{
    strncpy(fullname,name,Len-1);
    fullname[Len-1] = '\0';
    handicap = hc;
}*/
 
golf::~golf(){}
 
golf::setgolf()
{
    /* golf::golf(const char * name,int hc)
       {
        strncpy(fullname,name,Len-1);
        fullname[Len-1] = '\0';
        handicap = hc;
       }*/
    int io,hnp;
    char fullname[40];
    cout<<"Vvedite Vashe imya i handicap:\n";
    if(cin.get(fullname,Len))
     io = 1;
      else
       io = 0;
       cin.get();
       cin>>hnp;
       golf(fullname,hnp);
       cin.get();
       return io;                //ne ponimau,chto imenno vozvrashat'
       //return *this;  
}
 
void golf::fhandicap(int hc)
{
    handicap = hc;
}
 
void golf::showgolf() const
{  
    cout<<"Name: "<<fullname<<endl;
    cout<<"Handicap: "<<handicap<<endl;
}
*************************************
#include <cstdlib>
#include <iostream>
#include "golfobj.h"
using namespace std;
int main(int argc, char *argv[])
{
   golf players[3];/* =  {
                        golf("Sanya",15),
                        golf("Katia",30),
                        golf("Pasha",17)
                       };//massiv class golf
                    */  
    int i;
    char imia;
    int hnd;
    for(i=0;i<3;i++)
     {
       players[i].setgolf();
       players[i].showgolf();
       cout<<endl;
       cout<<"Vvedite new handicap:";
       int hnd = 0;
       cin>>hnd;
       cout<<endl;
       players[i].fhandicap(hnd);
     }
     for(i=0;i<3;i++)
     {
       players[i].showgolf();
       cout<<endl;
     }
    
    system("PAUSE");
    return EXIT_SUCCESS;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
M128K145
Эксперт C++
 Аватар для M128K145
8272 / 3491 / 142
Регистрация: 03.07.2009
Сообщений: 10,707
07.07.2010, 09:08     Готовый код.Как перестроить структуру под класс.wxDex-C++ #2
USHЁL, а почему это вызывает сложность? Вы же сначала когда писали эту функцию ничего не возвращали. Почему сейчас не написали тип возвращаемого значения(в данном случае void) и список параметров?
USHЁL
 Аватар для USHЁL
0 / 0 / 0
Регистрация: 15.11.2009
Сообщений: 93
07.07.2010, 16:11  [ТС]     Готовый код.Как перестроить структуру под класс.wxDex-C++ #3
Верхняя программка со структурой содержит в себе как бы 2 вида реализации(2-ая закоментирована).
Дело в том что я никак не могу понять как можно перестроить вот эту
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
int setgolf(golf & g) /// interaktivnaya versia
{
    int io,hnp;
    cout<<"Vvedite Vashe imya i handicap:\n";
    if(cin.get(g.fullname,Len))
     io = 1;
      else
       io = 0;
       cin.get();
       cin>>hnp;
       g.handicap = hnp;
       return io;
}*/
 
main()
{
 ...
//cout<<"vozvrashaemoe znachenie(0 or 1): "<<setgolf(players[i])<<endl; //interaktivnaya versia
...
}
функцию для работы с объектами?В программе,работающей со структурой,эта функция работает как бы из самой себя(если можно так выразится),сохраняет введённое имя и результат(гандикап) и возвращает одновременно '1' или '0'(Просто по заданию было сказано,что функция должна возвращать '1' если введено имя и '0' если не введено имя).Ей передаётся в аргументах переменная структуры,а в новой версии как этого добится,если функция должна обращаться к объекту.Но ведь объект как бы ещё не создан,он как мне кажется должен создаваться внутри функции...Скорее всего я как то не правильно думаю,поправьте,разъясните пожалуйста.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
07.07.2010, 16:44     Готовый код.Как перестроить структуру под класс.wxDex-C++ #4
USHЁL,

int golf::setgolf(golf&g) и вперед...
Нет. Не g. ща...

Добавлено через 30 минут
Лови... Вроде работает...

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 //golfobj.h
#ifndef GOOLF_H_
#define GOLF_H_
using namespace std;
const int Len = 40;
class golf
{
  private:
    char fullname[Len];
    int handicap;
  public:
   golf();
   golf(char _name[Len],int _hc);
   int setgolf(golf&);// ?
   ~golf();
   void fhandicap(int hc);
   void showgolf(golf&) const;
};
#endif
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
 //golf.cpp
#include <iostream>
#include <string>
#include "golfobj.h"
golf::golf()
{
    fullname[0] = '\0';
    handicap = 0;
}
 
golf::golf(char _name[Len],int _hc)
{
    strcpy(fullname, _name);
    handicap = _hc;
}
 
golf::~golf(){}
 
int golf::setgolf(golf&h)
{
 
    int io,hnp;
    cout<<"Vvedite Vashe imya i handicap:\n";
    if(cin.getline(h.fullname,Len))
     io = 1;
      else
       io = 0;
       cin>>hnp;
       h.handicap=hnp;
       return io;               
}
 
void golf::fhandicap(int hc)
{
    handicap = hc;
}
 
void golf::showgolf(golf&g) const
{  
    cout<<"Name: "<<g.fullname<<endl;
    cout<<"Handicap: "<<g.handicap<<endl;
}
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
 //main.cpp
#include <cstdlib>
#include <iostream>
#include "golfobj.h"
using namespace std;
int main(int argc, char *argv[])
{
   golf players[3];  //{
                       // golf("Sanya",15),
                       // golf("Katia",30),
                       // golf("Pasha",17)
                       //};//massiv class golf
                      
    int i;
    char imia;
    int hnd;
    for(i=0;i<3;i++)
     {
       players->setgolf(players[i]);
       players->showgolf(players[i]);
       cout<<endl;
       cout<<"Vvedite new handicap:";
       int hnd = 0;
       cin>>hnd;
       players[i].fhandicap(hnd);
       players->showgolf(players[i]);
       while(getchar()!='\n');
     }
     for(i=0;i<3;i++)
     {
       players->showgolf(players[i]);
       cout<<endl;
     }
    
    system("PAUSE");
    return EXIT_SUCCESS;
}
USHЁL
 Аватар для USHЁL
0 / 0 / 0
Регистрация: 15.11.2009
Сообщений: 93
07.07.2010, 17:16  [ТС]     Готовый код.Как перестроить структуру под класс.wxDex-C++ #5
Выдаёт одно единственное сообщение на 18 строчке: `setgolf' was not declared in this scope
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int golf::setgolf(golf & g)
{
    int io,hnp;
    char fullname[40];
    cout<<"Vvedite Vashe imya i handicap:\n";
    if(cin.get(g.fullname,Len))
     io = 1;
      else
       io = 0;
       cin.get();
       cin>>hnp;
       g.golf(cin,hnp);
       cin.get();
       return io;              
}
Добавлено через 3 минуты
оу! Не увидел сразу! Спасибо!=)

Добавлено через 22 минуты
Всё работает!Благодарю Вас!Переделал на своём проекте строки как Вы сделали.Не запускался.Скопировал вашу версию в новую папку-всё работает=)
Единственный вопрос возник,если Вас не затруднит,как здесь используется косвенная адресация?Она же вроде используется с указателем?
Цитата Сообщение от Lavroff Посмотреть сообщение
for(i=0;i<3;i++)
* * *{
* * * *players->setgolf(players[i]);
* * * *players->showgolf(players[i]);
* * * *cout<<endl;
* * * *cout<<"Vvedite new handicap:";
* * * *int hnd = 0;
* * * *cin>>hnd;
* * * *players[i].fhandicap(hnd);
* * * * * *players->showgolf(players[i]);
* * * * * *while(getchar()!='\n');
* * *}
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
07.07.2010, 18:32     Готовый код.Как перестроить структуру под класс.wxDex-C++ #6
USHЁL, Адресация идет от массива. Без указания элемента. Адресация massiv[i] идет через точку. massiv идет через стрелку. Здесь сделано через стрелку, а в параметрах i-ый эл-т массива. Как-то так)
Yandex
Объявления
07.07.2010, 18:32     Готовый код.Как перестроить структуру под класс.wxDex-C++
Ответ Создать тему
Опции темы

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