Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [C++] Химический элемент


Автор: Mcicool 18.12.2006, 15:05
Задача:
Поля данных класса: Название элемента, сокращенное название (например Na), порядковый номер в таблице, масса.
Все это пользователь вводит для двух элементов.
Программа должна проверить, у кого масса больше и вывести информацию о нем, если массы равны, то вывест соответствующее сообщение.
Вот код, компилируется, н овыполняется почему то неправильно: Сразу после ввода название программа вылетает.
Код

#include <iostream>
using namespace std;

class chem
{
char name;
char sname;
int num;
int m;

public:
friend bool operator > (chem a, chem b);
friend ostream& operator << (ostream &o, chem b);
friend istream& operator >> (istream &i, chem &b);
};

bool operator > (chem a, chem b)
{
if (a.m>b.m) return true;
return false;

}

ostream& operator << (ostream &o, chem b)
{
o<<b.name<<endl;
o<<b.sname<<endl;
o<<b.num<<endl;
o<<b.m<<endl;
return o;
}
istream& operator >> (istream &i, chem &b)
{
cout<<"Enter name: "<<endl;
i>>b.name;
cout<<"Enter sname :"<<endl;
i>>b.sname;
cout<<"Enter number :"<<endl;
i>>b.num;
cout<<"Enter mass :"<<endl;
i>>b.m;
return i;
}
int main()
{
chem first,second;
cin>>first;
cin>>second;
if (first>second) cout<<first<<endl;
else if (second>first) cout<<second;
else cout<<"Masses are equal"<<endl;
cin.get();
cin.get();
return 0;
}


Автор: paSha_X 18.12.2006, 16:47
Что-то она у меня ваще не компилируется, 16 ошибок.....

Автор: Sartorius 18.12.2006, 17:21
Код

char name;
char sname;

 Че то я не понял, как сюда название запихнуть))) Почему стороку не сделать?

Автор: Mcicool 18.12.2006, 17:32
А я не знаю, как со стрингами работать... Если не сложно, напишите.

Автор: Sartorius 18.12.2006, 17:40
Вместо

Код

char name;
char sname;


напиши 

Код

char name[5];


А где читаешь
Код

i >> b.name;

Автор: Oleg_Ci 18.12.2006, 19:34
Подправил немного, со стрингами тоже самое что и с массивами символов
Код

#include <iostream>
#include <string>
using namespace std;

class chem
{
    string name;
    string sname;
    int num;
    int m; // масса

public:
    // friend bool operator > (chem a, chem b); ?
    bool operator>( const chem & a )const;
    friend ostream& operator << (ostream &o, chem b);
    friend istream& operator >> (istream &i, chem &b);
};

bool chem::operator>( const chem & a )const{
    return m>a.m;
}

ostream& operator << (ostream &o, chem b)
{
    o<<b.name<<endl;
    o<<b.sname<<endl;
    o<<b.num<<endl;
    o<<b.m<<endl;
    return o;
}
istream& operator >> (istream &i, chem &b)
{
    cout<<"Enter name: "<<endl;
    i>>b.name;
    cout<<"Enter sname :"<<endl;
    i>>b.sname;
    cout<<"Enter number :"<<endl;
    i>>b.num;
    cout<<"Enter mass :"<<endl;
    i>>b.m;
    return i;
}

//////////// MAIN ///////////////////////
int main()
{
    chem first,second;
    cin>>first;
    cin>>second;
    if (first>second) cout<<first<<endl;
    else if (second>first) cout<<second;
    else cout<<"Masses are equal"<<endl;

    cin.clear();
    cin.sync();
    cin.get();
    return 0;
}

Автор: paSha_X 18.12.2006, 20:15
Не пойму почему она у меня не запускается, вроде всё нормально, но у меня ругается что элементы закрытые и к ним нельзя обрашаться через точку, хотя не должно........Из-за чего это может быть или всё-таки не правильный код, или ещё что не пойму.......подскажите пжалста..... 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)