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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сравнить два значения, Задачу решить с исп классов 
V
    Опции темы
SHUSTER
Дата 15.6.2011, 23:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Сравнить два значения (использовать классы)

На экране работа проги должна выглядеть так:

ВВЕсти имя: Ivan
ВВести год рождения: 1990
ВВести имя: Petr
ВВести год рождения: 2000

Ivan старше чем Petr
Ivan 1990
Petr 2000

Код класса должен быть примерно таким:

Код

class My_CClass
{
private: char* name;
int year;
public:
My_CClass (void);
~My_CClass(void);
};


Код функции main:

Код

void main(void)
{
My_CClass s1, s2;
cin >> s1 >> s2;
comp (s1, s2);
cout << s1 << '\n' << s2 << endl;
_getch();
}


Прототип дружественной ф-ции:

Код

void comp (const My_CClass, const My_CClass);


Хочу чтоб кто-нибудь мне помог собрать это всё в готовую задачу  smile 
PM MAIL ICQ Jabber   Вверх
mes
Дата 16.6.2011, 00:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

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



вот лови подарочек и допиливай.. 
Код

#include <iostream>

struct person
{
   std::string name;
   int year;
};

bool less_by_year (person const& lhs
                  ,person const& rhs)
{
   return (lhs.year<rhs.year);
}

person person_from_cin ()
{
   person pers = { "null_name", 0 };
   std::cout << "name:";
   std::cin >> pers.name;
   std::cout << "year:";
   std::cin >> pers.year;
   
   return pers;
}
void person_compare_cout(person const& lhs
                          ,person const& rhs) 
{
   if      (less_by_year(lhs,rhs)) std::cout << "less1";
   else if (less_by_year(rhs,lhs)) std::cout << "less2";
   else                            std::cout << "equal";
}

int main () {
    
   person_compare_cout(
      person_from_cin(),
      person_from_cin() 
   );
}



--------------------
PM MAIL WWW   Вверх
SHUSTER
Дата 16.6.2011, 00:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



По моей задаче мне надо, как я предполагаю, описать класс My_CClass и в нем функцию сравнения возвращающую:

Ivan старше чем Petr
Ivan 1990
Petr 2000

Правильно я понимаю?
PM MAIL ICQ Jabber   Вверх
volatile
Дата 16.6.2011, 06:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(SHUSTER @  16.6.2011,  00:35 Найти цитируемый пост)
My_CClass 

а почему два С? My_CClass

Иногда переменные называют с начальными буквами, подскажывающими тип переменной (венгерская нотация кажется называется).
В этом случае симвос С в начале, говорил-бы, что мы имеем дело с классом. CMy_Class - например.
Но в середине-то зачем он?
(честно говоря мне и в начале он почему-то всегда сильно не нравился и раздражал, но в середине это уже слишком!)

 smile 
PM MAIL   Вверх
borisbn
Дата 16.6.2011, 07:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

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



Цитата(mes @  16.6.2011,  00:17 Найти цитируемый пост)
person person_from_cin ()

придираться, так с музыкой   smile 
Код

const person person_from_cin ()


И исчо - чтоб не создавать тему по мелочам - не подскажете, чем по сути отличается
Код
const person & lhs

от
Код
person const & lhs

?

Это сообщение отредактировал(а) borisbn - 16.6.2011, 08:16


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
SHUSTER
Дата 16.6.2011, 15:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



borisbn, придирайтесь. но вот ток моего вопроса это не решает

А, вот ещё, данную задачу над решить с перегрузкой, и конструкторами/деструкторами. Хотя это и так я думаю понятно

Это сообщение отредактировал(а) SHUSTER - 16.6.2011, 15:27
PM MAIL ICQ Jabber   Вверх
RastaDja
Дата 16.6.2011, 15:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(SHUSTER @  16.6.2011,  01:35 Найти цитируемый пост)
По моей задаче мне надо, как я предполагаю, описать класс My_CClass и в нем функцию сравнения возвращающую:

я б перегрузил например операции "> < ==" , но как видно из следующего
Цитата(SHUSTER @  16.6.2011,  00:41 Найти цитируемый пост)
Код функции main:
void main(void)
{
  My_CClass s1, s2;
  cin >> s1 >> s2;
  comp (s1, s2);
  cout << s1 << '\n' << s2 << endl;
  _getch();
}

тебе надо перегрузить cin cout и написать отдельную функцию comp. Или я не прав?


--------------------
The more closely you look at one thing, the less closely can you see something else.
PM MAIL   Вверх
borisbn
Дата 16.6.2011, 15:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

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



SHUSTER, mes дал тебе готовое решение. Что тебя в нём не устраивает ?


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
SHUSTER
Дата 16.6.2011, 16:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



RastaDja, да, так и надо сделать


borisbn, вместо 
Код

struct person

мне надо написать описание класса 

А это
Код

bool less_by_year (person const& lhs
                  ,person const& rhs)
{
   return (lhs.year<rhs.year);
}

будет та самая (нужная мне) ф-ция сравнения

Вот что я понял пока разбирался с этим примером от 
mes, 

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


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

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



Цитата(SHUSTER @  16.6.2011,  16:11 Найти цитируемый пост)

borisbn, вместо 
struct person
мне надо написать описание класса 

в Си++ кроме способа доступа по-умолчанию структуры от классов ничем не отличаются.
лови

Код

#include <iostream>

// вставь сюда описание структуры (хочешь класса) person, ф-ции less_by_year и

// надеюсь у mes код под LGPL ? :)
person person_from_stream( std::istream & is )
{
   person pers = { "null_name", 0 };
   std::cout << "name:";
   is >> pers.name;
   std::cout << "year:";
   is >> pers.year;
   
   return pers;
}

std::istream & operator >> ( std::istream & is, person & p ) {
    p = person_from_cin( is );
}

ostream & operator << ( ostream & os, const person & p ) {
    std::cout << "name = " << p.name << ". year = " << p.year;
}

int main () {
  person s1, s2;
  std::cin >> s1 >> s2;
  person_compare_cout( s1, s2 ); // <----- вот эту ф-цию mes'а нужно будет допилить. я в тебя верю !
  std::cout << s1 << '\n' << s2 << endl;    
}




--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
SHUSTER
Дата 16.6.2011, 16:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



borisbn, стараюсь допиливаю. Маленьки трабл у меня - в Visual Studio 2010 (да и 2008 тож самое) ругается что не может найти файл iostream.h (а также iomanip.h  и ещё некоторые) Что делать?
PM MAIL ICQ Jabber   Вверх
triclosan
Дата 16.6.2011, 17:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(borisbn @  16.6.2011,  07:12 Найти цитируемый пост)
И исчо - чтоб не создавать тему по мелочам - не подскажете, чем по сути отличается
Выделить всёкод C++
1:
    
const person & lhs

от
Выделить всёкод C++
1:
    
person const & lhs

?

http://www.parashift.com/c++-faq-lite/cons...s.html#faq-18.8

Это сообщение отредактировал(а) triclosan - 16.6.2011, 18:03
PM MAIL   Вверх
borisbn
Дата 16.6.2011, 17:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

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



triclosan, спасибо ! хорошая подборка. только ссылку лучше было дать на 18.8, т.к. это именно то, о чём я спрашивал, а 18.6 просто описывает, что такое const-ссылка.


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
triclosan
Дата 16.6.2011, 18:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



borisbn, ага сневнимательничел, исправляю для поколений.
PM MAIL   Вверх
awesome
Дата 16.6.2011, 19:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(SHUSTER @  16.6.2011,  16:54 Найти цитируемый пост)
Маленьки трабл у меня - в Visual Studio 2010 (да и 2008 тож самое) ругается что не может найти файл iostream.h (а также iomanip.h  и ещё некоторые) Что делать? 



Код

#include <iostream>
#include <iomanip>

PM MAIL   Вверх
SHUSTER
Дата 22.6.2011, 08:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Код

#include "conio.h"
#include <iostream>
#include "stdafx.h"

using namespace std;

class CMyClass{
private:
    char *name;
    int year;
    friend void comp(const CMyClass, const CMyClass);

public:
    CMyClass(void); // конструктор
    CMyClass(const CMyClass&); // конструктор копии
    ~CMyClass(void); // деструктор
    void vvod();
   
};

CMyClass::CMyClass(void)
{
    cout << "VVEdite imya: ";
    cin >> name;
    cout << "\n VVEdite god rozhdeniya: ";
    cin >> year;
}

void comp(const CMyClass, const CMyClass)
{
    if (s1.year > s2.year)
    {
        cout << s1.name << " starshe chem " << s2.name << "\n";
        cout << s1.name << " " << s1.year << "\n";
        cout << s2.name << " " << s2.year;
    }
    if (s1.year < s2.year)
    {
        cout << s2.name << " starshe chem " << s1.name << "\n";
        cout << s1.name << " " << s1.year << "\n";
        cout << s2.name << " " << s2.year;
    }
    else
    {
        cout << "Oba 4ela odinakovogo goda rozhdeniya";
        cout << s1.name << " " << s1.year << "\n";
        cout << s2.name << " " << s2.year;
    }
};

CMyClass::~CMyClass(void)
{
    delete [] name;
}

int _tmain(int argc, _TCHAR* argv[])
{
    CMyClass s1, s2;
    cin >> s1;
    cin >> s2;
   comp (s1, s2);   
    _getch();
    return 0;
};


Вот что сам смог наваять. Объясните почему ВижуалСтудио пишет что не знает  таких "дел" как s1 и s2? И как написать код правильно?
Предполагаю что нужно бы ещё перегрузить оператор [] и какие-то ещё. Трабл - практически не понимаю зачем эта перегрузка надо (читаю в книгах и вижу фигу  smile )

Это сообщение отредактировал(а) SHUSTER - 22.6.2011, 08:28
PM MAIL ICQ Jabber   Вверх
triclosan
Дата 22.6.2011, 08:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(SHUSTER @  22.6.2011,  08:25 Найти цитируемый пост)
    
cin >> s1;
cin >> s2;


Надо перегрузить оператор >> для такого и сделать функцию перегрузки другом класса

PM MAIL   Вверх
SHUSTER
Дата 22.6.2011, 08:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Код

istream &operator>>(/* какие здесь будут параметры? */)

/* сам код перегрузки оператора? */

/* что будет возвращаться? */


Подскажите 
triclosan, по этим вопросам:
1. какие здесь будут параметры?
2. сам код перегрузки оператора?
3. что будет возвращаться?
PM MAIL ICQ Jabber   Вверх
mes
Дата 22.6.2011, 08:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

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



Цитата(SHUSTER @  22.6.2011,  07:25 Найти цитируемый пост)

не знает  таких "дел" как s1 и s2?
Код

void comp(const CMyClass, const CMyClass)


ну и где имена аргументов (s1 и s2), которые испоёьзуются в этой функции ?



--------------------
PM MAIL WWW   Вверх
triclosan
Дата 22.6.2011, 08:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Код

istream &operator>>(istream &is, CMyClass &my)
{
cout << "Enter data";
cin >> my.name >> my.year ;
return is;
}


PM MAIL   Вверх
mes
Дата 22.6.2011, 08:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

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



Цитата(SHUSTER @  22.6.2011,  07:25 Найти цитируемый пост)
 практически не понимаю зачем эта перегрузка надо

http://liveworkspace.org/code/076cb30bb590...c2e450df9c16fe2


--------------------
PM MAIL WWW   Вверх
SHUSTER
Дата 22.6.2011, 09:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



mes, надо писать так? - 
Код

void comp(const CMyClass &s1, const CMyClass &s2)
 в объявлении и описании конструктора?


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


Новичок



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

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



Фу, блин, экзамен сдал!!!
Всем спасибо за посильную помощь - без Вас, форумчане, у меня б ничё не вышло.
PM MAIL ICQ Jabber   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


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

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


 




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


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

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