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

Первый класс. Функция-член - C++

Восстановить пароль Регистрация
 
Detweeted
1 / 1 / 0
Регистрация: 10.10.2012
Сообщений: 21
15.10.2012, 00:11     Первый класс. Функция-член #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
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
#include <stdio.h>
#include <iostream>
#include <string>
#include <conio.h>
#include <fstream>
 
using namespace std;
 
class Work //класс хранит информацию о количестве отработанных часов в организации, зарплате и эффективности
{
    public:
        char organization[128]; //название организации
        float day[5]; //массив, в котором хранится количество часов, отработанных в день
        float salary; //зарплата
        float effectivity; //эффективность - зарплата/количество часов
        float CountOfEf(float day[5], float salary) //функция-член, которая считает эффективность
        {
            int i;
            int overallHours; 
            for (i=0; i<5; i++)
            overallHours+=day[i];  //суммируем часы за неделю
            effectivity=salary/overallHours; //вычисляем эффективность
            return effectivity;
        }
};
 
int getData (Work &ef) //функция для ввода с клавиатуры значений для класса
 
{ 
    cout << "organization:\n";
    cin >> ef.organization;
    if (stricmp(ef.organization, "0")==0) //если вводим "0" вместо организации, то выходим
        return 0;
    cout << "monday:\n";
    cin >> ef.day[1];
    cout << "tuesday:\n";
    cin >> ef.day[2];
    cout << "wensday:\n";
    cin >> ef.day[3];
    cout << "therthday:\n";
    cin >> ef.day[4];
    cout << "friday:\n";
    cin >> ef.day[5];
    cout << "salary:\n";
    cin >> ef.salary;
    return 1;
}
 
void DisplayData (Work &ef, fstream &f) //функция выводящая результаты в файл CountOfEf(ef.day, ef.salary)
 
{ 
    f << "\norganization:\n";
    f << ef.organization;
    f << "\nEffectivity:\n";    
    f << ef.effectivity;
}
 
int main(int nArgm, char* pszArgs[])
{
     const int N=10; //максимум введенных организаций
     int j, i=0;
     Work ef[N]; //создаем массив для объекта
     while (getData(ef[i]) && i<N) //пока не ввели 0 вводим организации
         i++;
     fstream f; //создаем файл для вывода информации
     f.open("output.txt", ios::out);
     for (j=0; j<i; j++)
     DisplayData(ef[j], f);
     f.close();
     cin.get();
     return 0; 
}
Все работает, только не вычисляется эффективность - вместо нее, какое-то жесткое отрицательное число в 8 степени. Мне кажется, ошибка в функции-члене, как ее правильно организовать?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
castaway
Эксперт С++
4848 / 2987 / 368
Регистрация: 10.11.2010
Сообщений: 11,028
Записей в блоге: 10
Завершенные тесты: 1
15.10.2012, 00:13     Первый класс. Функция-член #2
В каком именно члене какая проблема? Давай конкретнее.
Detweeted
1 / 1 / 0
Регистрация: 10.10.2012
Сообщений: 21
15.10.2012, 00:15  [ТС]     Первый класс. Функция-член #3
Цитата Сообщение от lazybiz Посмотреть сообщение
В каком именно члене какая проблема? Давай конкретнее.
Тут только одна функция-член, начинается с 16 строки.
edward_jonson
 Аватар для edward_jonson
157 / 157 / 25
Регистрация: 23.02.2011
Сообщений: 388
15.10.2012, 00:17     Первый класс. Функция-член #4
Detweeted, overallHours не инициализирована
panicwassano
591 / 559 / 20
Регистрация: 07.11.2010
Сообщений: 2,004
15.10.2012, 00:22     Первый класс. Функция-член #5
Цитата Сообщение от Detweeted Посмотреть сообщение
только не вычисляется эффективность
а вы ее в функции main и не вычисляете, вот у вас и выводится пустота
метод написали, а вызывать то кто будет?
castaway
Эксперт С++
4848 / 2987 / 368
Регистрация: 10.11.2010
Сообщений: 11,028
Записей в блоге: 10
Завершенные тесты: 1
15.10.2012, 00:22     Первый класс. Функция-член #6
Ну тогда хотя бы скажи, что должен делать этот член. Только не говори что он должен "считать эффективность"
panicwassano
591 / 559 / 20
Регистрация: 07.11.2010
Сообщений: 2,004
15.10.2012, 00:23     Первый класс. Функция-член #7
C++
1
float CountOfEf(float day[5], float salary)
данный метод в коде НИГДЕ не вызывается
Detweeted
1 / 1 / 0
Регистрация: 10.10.2012
Сообщений: 21
15.10.2012, 00:29  [ТС]     Первый класс. Функция-член #8
Цитата Сообщение от panicwassano Посмотреть сообщение
а вы ее в функции main и не вычисляете, вот у вас и выводится пустота
метод написали, а вызывать то кто будет?
Я ссылаюсь на класс, в котором определен метод и хочу, чтобы все, что находится внутри этого класса посчиталось само из имеющихся в классе данных. С++ так не умеет? :-)
Если каждый метод, определенный в классе, надо вручную вызывать в мейне, в чем тогда смысл создавать функцию-член внутри класса, а не делать просто отдельную функцию? Просто чисто для наглядности?
panicwassano
591 / 559 / 20
Регистрация: 07.11.2010
Сообщений: 2,004
15.10.2012, 00:36     Первый класс. Функция-член #9
Цитата Сообщение от Detweeted Посмотреть сообщение
Я ссылаюсь на класс, в котором определен метод и хочу, чтобы все, что находится внутри этого класса посчиталось само из имеющихся в классе данных. С++ так не умеет? :-)
Если каждый метод, определенный в классе, надо вручную вызывать в мейне, в чем тогда смысл создавать функцию-член внутри класса, а не делать просто отдельную функцию? Просто чисто для наглядности?
ты управляешь поведением объекта, а не он управляет сам собой. Если вы не понимает зачем ооп, пишите функции
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.10.2012, 00:55     Первый класс. Функция-член
Еще ссылки по теме:

класс А не принимает член-переменную с типом класс Б C++
Определить первый отрицательный член C++
И снова класс Матрицы с функция-член класса для нахождения определителя C++

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

Или воспользуйтесь поиском по форуму:
Detweeted
1 / 1 / 0
Регистрация: 10.10.2012
Сообщений: 21
15.10.2012, 00:55  [ТС]     Первый класс. Функция-член #10
Всем спасибо. По результатам замечаний форумчан, код заработал. На всякий случай выкладываю окончательный вариант.
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
#include <stdio.h>
#include <iostream>
#include <string>
#include <conio.h>
#include <fstream>
 
using namespace std;
 
class Work //класс хранит информацию о количестве отработанных часов в организации, зарплате и эффективности
{
    public:
        char organization[128]; //название организации
        int day[5]; //массив, в котором хранится количество часов, отработанных в день
        float salary; //зарплата
        float effectivity; //эффективность - зарплата/количество часов
        float CountOfEf(int hours[5], float money)
        {
            int i;
            int overallHours=0; 
            for (i=0; i<5; i++)
            overallHours+=hours[i];  //суммирум часы за неделю
            effectivity=money/overallHours; //вычисляем эффективность
            return effectivity;
        }
};
 
int getData (Work &ef) //функция для ввода с клавиатуры значений для класса
 
{ 
    cout << "organization:\n";
    cin >> ef.organization;
    if (stricmp(ef.organization, "0")==0) //если вводим "0" вместо организации, то выходим
        return 0;
    cout << "monday:\n";
    cin >> ef.day[0];
    cout << "tuesday:\n";
    cin >> ef.day[1];
    cout << "wensday:\n";
    cin >> ef.day[2];
    cout << "therthday:\n";
    cin >> ef.day[3];
    cout << "friday:\n";
    cin >> ef.day[4];
    cout << "salary:\n";
    cin >> ef.salary;
    ef.CountOfEf(ef.day, ef.salary);
    return 1;
}
 
void DisplayData (Work &ef, fstream &f) //функция, выводящая результаты в файл CountOfEf(ef.day, ef.salary)
 
{ 
    f << "\norganization:\n";
    f << ef.organization;
    f << "\nEffectivity:\n";    
    f << ef.effectivity;
}
 
int main(int nArgm, char* pszArgs[])
{
     const int N=10; //максимум введенных организаций
     int j, i=0;
     Work ef[N]; //создаем массив для объекта
     while (getData(ef[i]) && i<N) //пока не ввели 0 вводим организации
         i++;
     fstream f; //создаем файл для вывода информации
     f.open("output.txt", ios::out);
     for (j=0; j<i; j++)
     DisplayData(ef[j], f);
     f.close();
     cin.get();
     return 0; 
}
Yandex
Объявления
15.10.2012, 00:55     Первый класс. Функция-член
Ответ Создать тему
Опции темы

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