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

Проблемы с использованием класса - C++

Восстановить пароль Регистрация
 
TBIKC
web dev
 Аватар для TBIKC
104 / 91 / 1
Регистрация: 23.09.2010
Сообщений: 738
22.08.2011, 20:21     Проблемы с использованием класса #1
Задача
Водителям не безразличен пробег их авто. Один водитель записал свои данные о нескольких заправках, записывая пройденные км и число залитых в бак литров бензина
Разработайте программу, которая используя оператор while вводила бы пробег в км. и объём бензина в каждой заправке( пока не будет введено контрольное значение "-1" ).
Программа должна показывать общий пробег и сколько потрачено бензина


Я реализовал интерфейс и класс, а как задействовать в самом цикле что то не могу понять
Ведь если я напишу в main.cpp так savings One(2,16);
То у меня уже будут введены значения ...

Помогите пожалуйста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class savings
{
private:
    float Run; // Пробег в километрах
    float Gasoline; // Число залитых литров бензина
    float GenRun; // Всего литров
    float GenGasoline; // Всего бензина
 
savings(float Run,float Gasoline);//Конструктор
 
float getRun();
float getGasoline();
float getGenRun();
float getGenGasoline();
void setRun(float);
void setGasoline(float);
};
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
#include "stdafx.h"
#include <iostream>
#include "lang.h"
#include "savings.h"
 
using namespace std;
 
savings::savings(float run,float gasoline)
{
    setRun(run);
    setGasoline(gasoline);
}
void savings::setRun(float r)
{
    Run = r;
}
void savings::setGasoline(float g)
{
    Gasoline = g;
}
 
float savings::getRun()
{
    return Run;
}
float savings::getGasoline()
{
    return Gasoline;
}
float savings::getGenRun()
{
    return GenRun;
}
float savings::getGenGasoline()
{
    return GenGasoline;
}
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
viktorrrr
42 / 42 / 1
Регистрация: 11.02.2010
Сообщений: 358
22.08.2011, 21:15     Проблемы с использованием класса #2
Цитата Сообщение от TBIKC Посмотреть сообщение
Ведь если я напишу в main.cpp так savings One(2,16);
Ну эт ты ставишь значения по умолчани. Хотя не пойму, почему так делаешь. Можно ж переменные ввести вместо готовых цифр.
Нет компилятора под рукой. проверить не могу. Почему у тебя все данные в классе закрытые?.

Да и задачка явно неполная. Функции так лишнюю память жрут. Если уж так делаешь, можно все в майне сделать просто
almazsr
232 / 169 / 7
Регистрация: 13.11.2010
Сообщений: 425
22.08.2011, 21:28     Проблемы с использованием класса #3
TBIKC, можете прокомментировать вот это:
C++
1
2
3
        float Gasoline; // Число залитых литров бензина
        float GenRun; // Всего литров
        float GenGasoline; // Всего бензина
И у вас все методы и конструктор - private. А нужно public, я так понимаю.
TBIKC
web dev
 Аватар для TBIKC
104 / 91 / 1
Регистрация: 23.09.2010
Сообщений: 738
22.08.2011, 21:45  [ТС]     Проблемы с использованием класса #4
float Gasoline; // Число залитых литров бензина
float GenRun; // Всего км. пробега )
float GenGasoline; // Всего бензина

да public, а что же тогда private делать ?

Пс покажите пожалуйста реализацию в main.cpp
viktorrrr
42 / 42 / 1
Регистрация: 11.02.2010
Сообщений: 358
22.08.2011, 21:50     Проблемы с использованием класса #5
Цитата Сообщение от TBIKC Посмотреть сообщение
да public, а что же тогда private делать ?
Пс покажите пожалуйста реализацию в main.cpp
Чувак! Да у тебя проблема в том, что непонятно, что ты хочешь. Функции ничего не делают фактически. Бессмысленная реализация

Для начала хотя бы так распредели
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class savings
{
private:
        float Run; // Пробег в километрах
        float Gasoline; // Число залитых литров бензина
        float GenRun; // Всего литров
        float GenGasoline; // Всего бензина
 public:
savings(float Run,float Gasoline);//Конструктор
 
float getRun();
float getGasoline();
float getGenRun();
float getGenGasoline();
void setRun(float);
void setGasoline(float);
};
TBIKC
web dev
 Аватар для TBIKC
104 / 91 / 1
Регистрация: 23.09.2010
Сообщений: 738
22.08.2011, 22:26  [ТС]     Проблемы с использованием класса #6
Возможно вы правы, просто Сначала идёт глава Введение в классы и объекты а потом управляющие конструкции, ну вот я и подумал ( после опыта php ) начну в плюсах сразу всё делать на классах, привыкну и всё

Добавлено через 24 минуты
Решил делать всё в 1 файле, избавиться от не нужных функций и подставить вместо значений переменные, что то не получается

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
#include "stdafx.h"
#include <iostream>
#include "lang.h"
using namespace std;
class savings
{
private:
    float Run; // Пробег в километрах
    float Gasoline; // Число залитых литров бензина
    float GenRun = 0 ; // Всего пробега
    float GenGasoline = 0; // Всего бензина
 
public:
savings(float Run,float Gasoline);//Конструктор
 
};
 
int main()
{
    lang();
 
    savings One(Run,Gasoline);
 
    int count;
    cout << "Введите пробег" << endl;
    cin >> Run;
    cout << "Введите количество бензина" << endl;
    cin >> Gasoline;
    while ( count != - 1 )
    {
        cout << "Введите пробег" << endl;
        cin >> Run;
        cout << "Введите количество бензина" << endl;
        cin >> Gasoline;
 
        GenRun += Run;
        GenGasoline += Gasoline; 
    }
        cout << "Всего пройдено км " << GenRun << endl;
        cout << "Всего потрачено бензина" << GenGasoline << endl;
        
 
    system("PAUSE");
    return 0;
}
viktorrrr
42 / 42 / 1
Регистрация: 11.02.2010
Сообщений: 358
22.08.2011, 23:04     Проблемы с использованием класса #7
Цитата Сообщение от TBIKC Посмотреть сообщение
Решил делать всё в 1 файле, избавиться от не нужных функций и подставить вместо значений переменные, что то не получается
Миллион ошибок. Просто ни с чем не связанные элементы. Не знаю, как там в ПыХыПы. Но здесь вернись в 1 главу учебника по С++. В первую очередь повтори функции и как они работают. Без обид. Даж для меня начинающего это слишком простая программа. С ней легко разобраться с учебником.
TBIKC
web dev
 Аватар для TBIKC
104 / 91 / 1
Регистрация: 23.09.2010
Сообщений: 738
22.08.2011, 23:11  [ТС]     Проблемы с использованием класса #8
Я ещё до функций не доходил, Только введение в классы и объекты, управляющие конструкции часть 1 и всё
viktorrrr
42 / 42 / 1
Регистрация: 11.02.2010
Сообщений: 358
22.08.2011, 23:26     Проблемы с использованием класса #9
Цитата Сообщение от TBIKC Посмотреть сообщение
Я ещё до функций не доходил, Только введение в классы и объекты, управляющие конструкции часть 1 и всё
От функций к классам.! Если не знаешь, как разрабатывать функции, то очнеь скучно. А тут как начинаешь осваивать вызов по значению, вызов по ссылке, аж мурашки по коже начинают бегать, как же можно все круто сделать)))
TBIKC
web dev
 Аватар для TBIKC
104 / 91 / 1
Регистрация: 23.09.2010
Сообщений: 738
22.08.2011, 23:28  [ТС]     Проблемы с использованием класса #10
Помогите пожалуйста связать класс с кодом, чтобы работала программа, пожалуйста
viktorrrr
42 / 42 / 1
Регистрация: 11.02.2010
Сообщений: 358
22.08.2011, 23:43     Проблемы с использованием класса #11
Цитата Сообщение от TBIKC Посмотреть сообщение
Помогите пожалуйста связать класс с кодом, чтобы работала программа, пожалуйста
Может, завтра?. ХОтя, завтра могу поздно придти домой
almazsr
232 / 169 / 7
Регистрация: 13.11.2010
Сообщений: 425
22.08.2011, 23:49     Проблемы с использованием класса #12
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от TBIKC Посмотреть сообщение
Помогите пожалуйста связать класс с кодом, чтобы работала программа, пожалуйста
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
#include "stdafx.h"
#include <iostream>
#include "lang.h"
using namespace std;
class savings
{
public:
 
savings(float Run,float Gasoline)
{
this->Run=Run; 
this->Gasoline=Gasoline;
GenRun=0;
GenGasoline=0;
}
 
void add(float Run, float Gasoline)
{
GenRun+=Run;
GenGasoline+=Gasoline;
}
 
float getGenGasoline()
{
return this->GenGasoline;
}
 
float getGenRun()
{
return this->GenRun;
}
 
 private:
        float Run; // Пробег в километрах
        float Gasoline; // Число залитых литров бензина
        float GenRun ; // Всего пробега
        float GenGasoline; // Всего бензина
};
 
int main()
{
        lang();
        int Run, Gasoline;
        cout << "Введите пробег" << endl;
        cin >> Run;
        cout << "Введите количество бензина" << endl;
        cin >> Gasoline;
        savings One(Run,Gasoline);
 
        int count;
        cout << "Введите количество заправок" << endl;
        cin >> count;
        while ( count != - 1 )
        {
                cout << "Введите пробег" << endl;
                cin >> Run;
                cout << "Введите количество бензина" << endl;
                cin >> Gasoline;
                One.add(Run,Gasoline); 
        }
                cout << "Всего пройдено км " << One.getGenRun() << endl;
                cout << "Всего потрачено бензина" << One.getGenGasoline() << endl;
                
 
        system("PAUSE");
        return 0;
}
TBIKC
web dev
 Аватар для TBIKC
104 / 91 / 1
Регистрация: 23.09.2010
Сообщений: 738
23.08.2011, 11:23  [ТС]     Проблемы с использованием класса #13
Прокомментируйте пожалуйста строчки
this->Run=Run;
и
return this->GenGasoline;

+ ввожу -1 а он не прекращает писать введите ...

Добавлено через 11 часов 30 минут
Происходит зацикливание, что не так ?
-=ЮрА=-
Заблокирован
Автор FAQ
23.08.2011, 14:40     Проблемы с использованием класса #14
Листинги
[savings.h]
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
#ifndef C_SAVINGS
#define C_SAVINGS
 
#pragma once
 
class savings
{
private:
    float Run;          // Пробег в километрах
    float Gasoline;     // Число залитых литров бензина
    float GenRun;       // Всего литров
    float GenGasoline;  // Всего бензина
public: 
    savings(float Run,float Gasoline);//Конструктор
    ~savings();//Лучше всего всегда и деструктор, пусть и пустой делать не прогадаешь!
 
    void add(float Run, float Gasoline);
 
    float getRun();
    float getGenRun();
    void  setRun(float);
 
    float getGasoline();
    void  setGasoline(float);
    float getGenGasoline();
};
 
#endif
[savings.cpp]
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
#include "savings.h"
 
savings::savings(float run,float gasoline)
{
    GenRun      =   0;  // Всего литров
    GenGasoline =   0;  // Всего бензина
    setRun(run);
    setGasoline(gasoline);
}
 
savings::~savings()
{
    //
}
 
void savings::add(float run, float gasoline)
{
    GenRun      +=  run;
    GenGasoline +=  gasoline;
}
 
void savings::setRun(float r)
{
    Run = r;
}
 
void savings::setGasoline(float g)
{
    Gasoline = g;
}
 
float savings::getRun()
{
    return Run;
}
 
float savings::getGasoline()
{
    return Gasoline;
}
 
float savings::getGenRun()
{
    return GenRun;
}
 
float savings::getGenGasoline()
{
    return GenGasoline;
}
[use_class.cpp]
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
#include <iostream.h>
#include <windows.h>
#include "savings.h"
 
int main()
{
    SetConsoleOutputCP(1251);//Русский
    int Run, Gasoline;
    savings One(0,0);
 
    int count;
    cout << "Введите количество заправок" << endl;
    cin >> count;
    while ( count != 0 )
    {
        cout << "Введите пробег" << endl;
        cin >> Run;
        cout << "Введите количество бензина" << endl;
        cin >> Gasoline;
        One.add(Run,Gasoline); 
        count--;//У тебя не было дикремента
    }
    cout << "Всего пройдено км "      << One.getGenRun() << endl;
    cout << "Всего потрачено бензина" << One.getGenGasoline() << endl;
                
    system("PAUSE");
    return 0;
}
Миниатюры
Проблемы с использованием класса  
-=ЮрА=-
Заблокирован
Автор FAQ
23.08.2011, 14:41     Проблемы с использованием класса #15
Цитата Сообщение от TBIKC Посмотреть сообщение
Происходит зацикливание, что не так ?
-
Ты забыл что нужно дикрементировать count --
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
count--;//У тебя не было дикремента
TBIKC
web dev
 Аватар для TBIKC
104 / 91 / 1
Регистрация: 23.09.2010
Сообщений: 738
23.08.2011, 14:50  [ТС]     Проблемы с использованием класса #16
Заработало, только вот про
this->Run=Run;
и
return this->GenGasoline;
мне так никто и не рассказал, зачем и почему

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
#include "stdafx.h"
#include <iostream>
#include "lang.h"
using namespace std;
class savings
{
public:
 
savings(float Run,float Gasoline)
{
this->Run=Run; 
this->Gasoline=Gasoline;
GenRun=0;
GenGasoline=0;
}
 
void add(float Run, float Gasoline)
{
GenRun+=Run;
GenGasoline+=Gasoline;
}
 
float getGenGasoline()
{
return this->GenGasoline;
}
 
float getGenRun()
{
return this->GenRun;
}
 
 private:
        float Run; // Пробег в километрах
        float Gasoline; // Число залитых литров бензина
        float GenRun ; // Всего пробега
        float GenGasoline; // Всего бензина
};
 
int main()
{
        lang();
        int Run, Gasoline;
        savings One(Run,Gasoline);
 
        int count;
        cout << "Введите количество заправок" << endl;
        cin >> count;
        while ( count != 0 )
        {
                cout << "Введите пробег" << endl;
                cin >> Run;
                cout << "Введите количество бензина" << endl;
                cin >> Gasoline;
                One.add(Run,Gasoline); 
                    count--;
        }
                cout << "Всего пройдено км " << One.getGenRun() << endl;
                cout << "Всего потрачено бензина" << One.getGenGasoline() << endl;
                
 
        system("PAUSE");
        return 0;
}
-=ЮрА=-
Заблокирован
Автор FAQ
23.08.2011, 14:58     Проблемы с использованием класса #17
Потому что в конструкторе
Цитата Сообщение от almazsr Посмотреть сообщение
avings(float Run,float Gasoline)
almazsr
дал имена входным параметрам аналогичные приват параметрам класса, и this->Run -указывает на приват переменную, которой присваиваешь значение входного параметра float Run, тоже самое и с Gasoline. Другое дело зачем almazsr было вводить такую путаницу с параметрами было если их имена можно было делать не идентичными с именами приват переменных всё Твой конструктор следовало дополнить начальной инициализацией
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
GenRun* * * * * * * = * * * 0;* * * // Всего литров
* * GenGasoline = * * * 0;* * * // Всего бензина
ну или же ввести ещё 2-е функции setGenRun и setGenGasoline, причём их введение даже не обходимо, т.к. после ввода никак обнулить GenRun и GenGasoline вроди как и нет возможности

Добавлено через 3 минуты
Цитата Сообщение от TBIKC Посмотреть сообщение
Заработало, только вот про
this->Run=Run;
и
return this->GenGasoline;
мне так никто и не рассказал, зачем и почему
Сказал в посте выше, просто не успел до твоего поста
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.03.2015, 00:06     Проблемы с использованием класса
Еще ссылки по теме:

Как вывести время в консоли с++ с использованием класса C++
Нужна программа с использованием класса String C++
C++ Переделать программу с использованием шаблона класса

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

Или воспользуйтесь поиском по форуму:
System16v
 Аватар для System16v
3 / 3 / 0
Регистрация: 19.02.2014
Сообщений: 115
09.03.2015, 00:06     Проблемы с использованием класса #18
Может будет кому интересно тоже книгу изучаю по С++,написал сначала без класса,потом решил и написал (не без подсказок гугла и книги конечно,но сам) вот код с использованием класса
C++
1
2
3
4
5
6
7
8
9
10
11
12
//---------------------------------------------------------------------------
#include <vcl.h>
#include <iostream>
#include <cstdlib>
 
using namespace std;
 
class Schet
        {
        public:
                void MilNaLitr();
        };
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
//---------------------------------------------------------------------------
#include <vcl.h>
#include <iostream>
#include <cstdlib>
#include "Unit2.h"
 
using namespace std;
 
        void Schet::MilNaLitr()
                {
                double probeg;
                double benzin;
                double x,z,a=0,b=0;
                cout << "Vvedite probeg: "<<endl;
                cin >> probeg;
                while(probeg!=-1)
                {
                cout << "Vvedite benzin: "<<endl;
                cin >> benzin;
                a+=probeg;
                b+=benzin;
                x=probeg/benzin;
                z=a/b;
                cout << "Mil na Litr: " << x <<endl;
                cout << "Obshie mili na Litr: " << z <<endl;
                cout << "Vvedite probeg: " <<endl;
                cin >> probeg;
                }
                }
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <vcl.h>
#include <iostream>
#include <cstdlib>
#include "Unit2.h"
 
using namespace std;
 
int main()
        {
                Schet mySchet;
                mySchet.MilNaLitr();
                system("pause");
                return 0;
        }
Т.к. посмотрел ваши коды,и не совсем их понял,да и про заправки еще какие-то,в задании их нет.
Yandex
Объявления
09.03.2015, 00:06     Проблемы с использованием класса
Ответ Создать тему
Опции темы

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