Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [C++] Химический элемент, перегрузка операторов 
:(
    Опции темы
Mcicool
Дата 18.12.2006, 15:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 205
Регистрация: 9.10.2005

Репутация: нет
Всего: нет



Задача:
Поля данных класса: Название элемента, сокращенное название (например 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;
}


PM MAIL   Вверх
paSha_X
Дата 18.12.2006, 16:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 80
Регистрация: 5.12.2006
Где: Беларусь, Минск

Репутация: 1
Всего: 2



Что-то она у меня ваще не компилируется, 16 ошибок.....
PM MAIL WWW IM ICQ AOL YIM MSN   Вверх
Sartorius
Дата 18.12.2006, 17:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1568
Регистрация: 18.7.2006
Где: Ivory tower

Репутация: 8
Всего: 37



Код

char name;
char sname;

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

Это сообщение отредактировал(а) Sartorius - 18.12.2006, 17:23
PM MAIL ICQ   Вверх
Mcicool
Дата 18.12.2006, 17:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 205
Регистрация: 9.10.2005

Репутация: нет
Всего: нет



А я не знаю, как со стрингами работать... Если не сложно, напишите.
PM MAIL   Вверх
Sartorius
Дата 18.12.2006, 17:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1568
Регистрация: 18.7.2006
Где: Ivory tower

Репутация: 8
Всего: 37



Вместо

Код

char name;
char sname;


напиши 

Код

char name[5];


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

i >> b.name;

PM MAIL ICQ   Вверх
Oleg_Ci
Дата 18.12.2006, 19:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Friend
**


Профиль
Группа: Участник
Сообщений: 485
Регистрация: 28.5.2006
Где: Новосиб.обл.

Репутация: 25
Всего: 30



Подправил немного, со стрингами тоже самое что и с массивами символов
Код

#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;
}

PM MAIL   Вверх
paSha_X
Дата 18.12.2006, 20:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 80
Регистрация: 5.12.2006
Где: Беларусь, Минск

Репутация: 1
Всего: 2



Не пойму почему она у меня не запускается, вроде всё нормально, но у меня ругается что элементы закрытые и к ним нельзя обрашаться через точку, хотя не должно........Из-за чего это может быть или всё-таки не правильный код, или ещё что не пойму.......подскажите пжалста..... 
PM MAIL WWW IM ICQ AOL YIM MSN   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0846 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.