2016-05-15 4 views
0

Как правило, у меня есть класс с именем «человек» и его методы, печать: для печати данных и is_better_than, чтобы найти некоторые максимальные числа. Я не понимаю, в чем проблема. Любой совет?Ошибка программы; нужен совет

#include <iostream> 
#include <string> 
#include <math.h> 
using namespace std; 

class person 
{ 
    private: 
     string name; 
     double weight; 
     double height; 

    public: 
     person(); //Constructor 

     bool is_better_than(person best); 
     void read(); 
     void print(); 

     void operator=(const person& b); //overloading operator 
}; 

person::person() 
{ 
    string name = ""; 
    double weight = 0; 
    double height = 0; 
} 

void person::print() 
{ 
    cout << name << "\nWeight: " << weight << "\nHeight: " << height << "\n"; 
} 

void person::read() 
{ 
    cout << "Please enter person's name: "; 
    getline(cin, this->name); 
    cout << "Please enter person's weight: "; 
    cin >> this->weight; 
    cout << "Please enter person's height: "; 
    cin >> this->height; 

    string remainder; 
    getline(cin, remainder); //clear the buffer 
} 

bool person::is_better_than(person best) 
{ 
    if ((this->weight/pow(this->height,2) >= best.weight/(pow(best.height,2))) || best.weight == 0) 
     return true; 

    return false; 
} 

// iperfortosi telesti = 
void person::operator=(const person & b) 
{ 
    this->name = b.name; 
    this->weight = b.weight; 
    this->height = b.height; 
} 

int main() 
{ 
    person maxBMI; 
    bool cont = true; 
    while (cont) 
    { 
     person newperson; 
     newperson.read(); 

     if (newperson.is_better_than(maxBMI)) 
      maxBMI = newperson; 

     cout << "More data? (y/n) "; 
     string answer; 
     getline(cin, answer); 

     if (answer != "y") 
      cont = false; 
    } 
    cout << "The person with maximum BMI (body mass index) is "; 
    maxBMI.print(); 
    return 0; 
} 

Выход:

 
Please enter person's name: Name 
Please enter person's weight: 123 
Please enter person's height: 123 
More data? (y/n) n 
The person with maximum BMI (body mass index) is 
Weight: 1.7881e-307 
Height: 2.0746e-317 
+0

Я думаю, что вес и высота для него появляются странно, чего он не ожидал. – randominstanceOfLivingThing

+0

Я получаю неправильный вывод –

+2

Мой совет - использовать * отладчик * и один шаг через каждую команду, * наблюдать * значения переменных. –

ответ

1

Ваш конструктор по умолчанию не работает, потому что он присваивает локальные переменные, а не к переменному классу. Он должен выглядеть следующим образом:

person::person() 
{ 
    name = ""; 
    weight = 0; 
    height = 0; 
} 

или лучше:

person::person() : name(""), weight(0.0), height(0.0) {} 

С вашего конструктора по умолчанию, атрибуты класса остаются неинициализированным и предположение, что best.weight изначально равна нулю, не работает.

+0

Ему нужен конструктор по умолчанию. имя не нуждается в конструировании, но высота и вес делают. –

+0

Это второй раз, когда я видел эту ошибку (локальные переменные в конструкторе) сегодня на SO. Появилась ли какая-то новая книга/веб-сайт, которая запутывает, или это всего лишь один инструктор. –

+0

@MartinBonner, о, были совпадения гораздо более жесткие. :) – bipll

Смежные вопросы