Проблема с программой.

Сделал программу с классом.

Human.h

  #include <iostream>
#include <string>
using namespace std;
class Human
{
public:
void set_age(int h_age)
{
    age = h_age;
}
int get_age()
{
    return age;
}
void set_weight(int h_weight)
{
    weight=h_weight;
}
int get_weight()
{
    return weight;
}
void set_name(string h_name)
{
    name = h_name;
}
string get_name()
{
    return name;
}
void set_adzn(int h_adzn[])
{
    for (i=0; i<4; i++)
    {
        adzn[i] = h_adzn[i];
        sum = sum + h_adzn[i];
    }
}
void set_sr_adzn(float h_sr_adzn)
{
    h_sr_adzn = sum/4;
    sr_adzn = h_sr_adzn;

}
float get_sr_adzn()
{
    return sr_adzn;
}
private:
int age, weight, i, sum;
float sr_adzn;
string name;
int adzn[4];
};

Man.cpp

 #include <iostream>
#include "Human.h"
#include <string>
using namespace std;
int main()
{
    setlocale(0, "");
    Human man;
    int age, weight, i, sum;
    int adzn[4];
    string name;
    cout << "Введите свой возраст: " << endl;
    cin >> age;
    man.set_age(age);
    cout << "Введите ваш вес: " << endl;
    cin >> weight;
    man.set_weight(weight);
    cout << "Введите ваше имя: " << endl;
    cin >> name;
    man.set_name(name);
    for (i=0; i<4; i++)
    { 
        cout << "Введите оценку № "<< i+1 << ": " << endl;
        cin >> adzn[i]; 
    }
    man.set_adzn(adzn);
    cout << "Ваш возраст: " << man.get_age() << endl;
    cout << "Ваш вес: " << man.get_weight()  <<endl;
    cout << "Ваше имя: " << man.get_name() << endl; 
    cout << "Ваш средний балл: " << man.get_sr_adzn() << endl;
    getchar();
    return 0;
}

Вместо среднего балла выдаётся левое число.
Как это можно исправить.

В методе set_adzn(int h_adzn[]) перед суммированием sum не сбрасывается в 0. А надо бы.

Попутные замечания:

  1. Метод set_sr_adzn(float h_sr_adzn) странен. Возможно ошибка.

  2. В классе отсутствует конструктор. Поэтому, если для какого-то члена класса вызвать метод-геттер до метода-сеттера, то получим мусор.

  3. В качестве членов класса совершенно не обязательно прописывать абсолютно все переменные, которые используются в методах класса. Например переменную i гораздо уместнее сделать локальной для цикла for метода set_adzn(int h_adzn[]).

  4. Если метод-сеттер делает только присваивание члену класса, а метод-геттер — только возвращает значение члена класса, то лучше сделать этот член класса открытым и не плодить лишние методы.

Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.

Ответить

Вы можете использовать разметку markdown для оформления комментариев и постов. Используйте функцию предпросмотра для проверки корректности разметки.

Пожалуйста, оформляйте исходный код в соответствии с правилами разметки. Для того, чтобы вставить код в комментарий, скопируйте его в текстовое поле ниже, после чего выделите то, что скопировали и нажмите кнопку «код» в панели инструментов. Иначе ваш код может принять нечитаемый вид.

Либо производите оформление кода вручную, следующим образом:

``` #include <iostream> using namespace std; int main() { // ... } ```

Предпросмотр сообщения

Ваше сообщение пусто.