Задача: Классы. Определение класса Tnote(запись). Перегрузка операторо

Тема в разделе "C/C++/C#", создана пользователем -, 5 дек 2010.

Статус темы:
Закрыта.
  1. Гость

    Помогите пожалуста, я не знаю как реализовать((
    не могу разобратся, может есть какой-то пример. Буду очень признательна

    1. Определить класс с именем NOTE, содержащий следующие поля:
    • фамилия, имя;
    • номер телефона;
    • год рождения .
    2. Написать программу, выполняющую следующие действия:
    • ввод с клавиатуры данных в массив, состоящий из трех объектов типа NOTE; записи должны быть упорядочены по трем первым цифрам номера телефона;
    • вывод на экран информации о человеке, чья фамилия введена с клавиатуры;
    • если такого нет, выдать на дисплей соответствующее сообщение.
     
  2. DarkKnight

    DarkKnight Well-Known Member
    C\C++ Team

    Регистрация:
    1 авг 2010
    Сообщения:
    653
    Симпатии:
    0
    2 ксешенька : Если ли свои наработки какие-нибудь по коду???
    Примеров тут много... Из последних которые тут на форуме постил, похожие : это Фирмы:Классы, Студенты:Классы
    Определение вашего класса будет представлять
    Код (C++):
    class TNome
    {
    char FamName[128]; //• фамилия, имя;
    char TelNumber[16] //• номер телефона;
    unsigned int birdyear; //• год рождения .
    }
     
  3. Гость

    Код (C++):
    class NOTE
    {

    char name[20];
    char surname[30];
    int year_of_birth;
    double tel_number;
    public:
    NOTE() {};
    void vvod()
    {
    cout<<"Vvedit' im'ia"<<'\n';
    cin>>name;
    cout<<"Vvedit' prizvishe"<<'\n';
    cin>>surname;
    cout<<"Vvedit' rik narodjennia"<<'\n';
    cin>>year_of_birth;
    cout<<"Vvedit' nomer telefony"<<'\n';
    cin>>tel_number;
    };
    void vivod()
    {
    cout<<"Im'ia: "<<name;
    cout<<" Prizvishe: "<<surname;
    cout<<" Rik narodjennia: "<<year_of_birth;
    cout<<" Nomer Tel: "<<tel_number<<'\n';
    }
    };

    int _tmain(int argc, _TCHAR* argv[])
    {
    NOTE mas[3];
    for(int i=0; i<3; i++)
    {
    mas[i].vvod();
    }
    for(int i=0; i<3; i++)
    {
    mas[i].vivod();
    }
    system("pause");
    return 0;

    }

    это то что смогла написать я .
    не могу понять куда всунуть пергрузку и как сделать поиск по фамилии(
    помогите пожалуста)
     
  4. lazybiz

    lazybiz Well-Known Member
    C\C++ Team

    Регистрация:
    3 ноя 2010
    Сообщения:
    1.344
    Симпатии:
    0
    ксешенька. пиши с тэгами! нифига же не понято.
    Приведешь в нормальный вид - помогу.
     
  5. ensane

    ensane Гость

    Народ, сорри что вмешиваюсь, но почему если даже задача на C++/классы => ООП, все равно используется процедурный подход? Почему char* если есть string?
    P.S. Это касается не только этой темы, но и вообще всего раздела.
     
  6. lazybiz

    lazybiz Well-Known Member
    C\C++ Team

    Регистрация:
    3 ноя 2010
    Сообщения:
    1.344
    Симпатии:
    0
    Потому, что это разные типы данных. Или ты хочешь сказать что в С++ тип char * вообще использовать не нужно?
     
  7. Гость

    Код (C++):
    class NOTE
    {

    char name[20];//имя человека
    char surname[30];//фамилия
    int year_of_birth;//год рождения
    double tel_number;//номер телефона
    public:
    NOTE() {};//конструктор по умолчанию
    void vvod()//функция ввода данных с клавиатуры
    {
    cout<<"Vvedit' im'ia"<<'\n';
    cin>>name;
    cout<<"Vvedit' prizvishe"<<'\n';
    cin>>surname;
    cout<<"Vvedit' rik narodjennia"<<'\n';
    cin>>year_of_birth;
    cout<<"Vvedit' nomer telefony"<<'\n';
    cin>>tel_number;
    };
    void vivod()//функция вывода
    {
    cout<<"Im'ia: "<<name;
    cout<<" Prizvishe: "<<surname;
    cout<<" Rik narodjennia: "<<year_of_birth;
    cout<<" Nomer Tel: "<<tel_number<<'\n';
    }
    };

    int _tmain(int argc, _TCHAR* argv[])
    {
    NOTE mas[3];//массив типа NOTE, количество данных которые мы вводим
    for(int i=0; i<3; i++)
    {
    mas[i].vvod();//вводим 3 значения
    }
    for(int i=0; i<3; i++)
    {
    mas[i].vivod();//и выводим тож 3
    }
    system("pause");
    return 0;

    }

    если я правильно тебя поняла)
     
  8. DarkKnight

    DarkKnight Well-Known Member
    C\C++ Team

    Регистрация:
    1 авг 2010
    Сообщения:
    653
    Симпатии:
    0
    Вот, перезагруженных функций тут более чем достаточно...
    Единственное поиск по фамилии не описал.. Очень спать хочу, а если поиск начну писать, то и менюшку воять придется...
    Код (C++):
    /*
    1. Определить класс с именем NOTE, содержащий следующие поля:
    • фамилия, имя;
    • номер телефона;
    • год рождения .
    2. Написать программу, выполняющую следующие действия:
    • ввод с клавиатуры данных в массив, состоящий из трех объектов типа NOTE; записи должны быть упорядочены по трем первым цифрам номера телефона;
    • вывод на экран информации о человеке, чья фамилия введена с клавиатуры;
    • если такого нет, выдать на дисплей соответствующее сообщение.
    з.ы. еще нужны перегрузка операторов(сравнение или присвоение)
    */


    /*
    codeby.net
    Autor: DarkKnight125 (Denis Goncharov)
    */

    #include <iostream>

    using namespace std;

    //Объявление класса TNote
    class TNote
    {
    private:
    char    Soname[32]; //Фамилия
    char    Name[16]; //Имя
    char    TelNubm[14]; //Отчество
    int     Year; //Год рождения

    public:

    TNote(){}; //Конструктор по умолчанию

    //Перезагруженный оператор сравнения (сравнивает по всем полям)
    bool operator == (TNote& A)
    {
    bool Res = false; //Выставим флаг результат ТРУ
    if (strcmp(Soname,A.Soname) == 0) //Если Фамилии равны
    if (strcmp(Name,A.Name) == 0) //Если Имена равны
    if (strcmp(TelNubm,A.TelNubm) == 0) //Если тел. номера равны
    if (Year == A.Year) //И год рождения тоже
    Res = true; //То сменим флаг на true
    return Res;
    }
    //Дружественная функция сортировки массива TNote по ном. телефона
    friend void SortNote(TNote *Arr, int Size)
    {
    for (int i = 0; i <Size; i++)
    for (int j =i+1; j < Size; j++)
    if (strcmp(Arr[i].TelNubm,Arr[j].TelNubm) > 0)
    {
    TNote Temp;
    Temp = Arr[i];
    Arr[i] = Arr[j];
    Arr[j] = Temp;
    }
    }

    //Дружественная перезагрузка оператора потокового ввода
    friend istream& operator>> (istream& in,TNote& Note)
    {
    cout<< "Ввод записи TNote" << endl;
    cout << "Введите Фамилию : ";
    in.getline(Note.Soname,31);
    cout << "Введите Имя : ";
    in.getline(Note.Name,15);
    cout << "Введите номер телефона : ";
    in.getline(Note.TelNubm,13);
    cout << "Введите год рождения : ";
    in>>Note.Year;
    in.ignore(1);
    return in;
    }

    //Дружественная перезагрузка оператора потокового вывода
    friend ostream& operator<< (ostream& out, TNote& Note)
    {
    out << "---------------------------------------" << endl;
    out << "Фамилия : " << Note.Soname << endl;
    out << "Имя : " << Note.Name << endl;
    out << "Номер телефона : " << Note.TelNubm << endl;
    out << "Год рождения : " << Note.Year << endl;
    out << "---------------------------------------" << endl << endl;
    return out;
    }
    };


    //Основная функция (точка входа)
    void main(void)
    {
    setlocale(LC_ALL,".1251"); //Установим локаль
    TNote Arr[3]; //Наш массив объектов

    //Ввод массива
    for (int i = 0; i< 3; i++)
    cin>>Arr[i];

    //Проверка перазагруженной функции
    if (Arr[1] == Arr[2])
    cout << "Объект 2 == Объекту 3" << endl;
    else cout << "Объект 2 != Объекту 3" << endl;

    SortNote(Arr,3); //Отсортируем массив по ном. телефонов

    //Выведим отсортированный массив на экран
    for (int i = 0; i<3; i++)
    cout << Arr[i];
    }
     
  9. ensane

    ensane Гость

    Это разные инструменты для решения определенного типа задач. В некоторых случаях string лучше, в других - char*. В данном случае лучше string.
    Я бы сказал, что там, где это возможно, лучше использовать string. Это улучшает читабельность кода, избавляет от глупых ошибок и потихоньку приучает к ООП-стилю.
     
  10. lazybiz

    lazybiz Well-Known Member
    C\C++ Team

    Регистрация:
    3 ноя 2010
    Сообщения:
    1.344
    Симпатии:
    0
    Твой вариант с поиском по фамилии.
    Код (C++):
    #include <iostream.h>

    class NOTE {
    char    name[20];
    char    surname[30];
    int     year_of_birth;
    double  tel_number;     // лучше использовать char [20] или другого размера

    public:
    NOTE() {};

    char *get_surname()
    {
    return surname;
    }

    void vvod()
    {
    cout << "Enter name: "; cin >> name;
    cout << "Enter surname: "; cin >> surname;
    cout << "Enter year of birth: "; cin >> year_of_birth;
    cout << "Enter telephone number: "; cin >> tel_number;
    }

    void vivod()
    {
    cout << "Name: " << name << endl;
    cout << "Surname: " << surname << endl;
    cout << "Year of birth: " << year_of_birth << endl;
    cout << "Telephone number: " << tel_number << endl;
    }
    };

    int main( /* Зачем нам арументы, если мы их не используем? */ )
    {
    NOTE    mas[3];

    for ( int i = 0; i < 3; i++ ) {
    mas[i].vvod();
    }

    for( int i = 0; i < 3; i++ ) {
    mas[i].vivod();
    }

    for( int i = 0; i < 3; i++ ) {
    if ( strcmp( mas[i].get_surname(), "Ivanov" ) == 0 ) {
    mas[i].vivod();
    }
    }

    system( "pause" );
    return 0;
    }
     
  11. DarkKnight

    DarkKnight Well-Known Member
    C\C++ Team

    Регистрация:
    1 авг 2010
    Сообщения:
    653
    Симпатии:
    0
    2 ensane : Кординально не согласен с вашим сообщением.... Лично меня использование базового класса string - всегда настораживает, если я вижу его в коде... Я не говорю про библиотечную специализацию (такую как AnsiString в VCL Борданде (Delphi/С++ Builder), CString (MFC Microsoftа)... Но если я вижу в консольной программе или в оконной построенной сугубо на API string - это в первую очередь крайне подозрительно)
    Строка по своему определению - это мусорка в памяти, поэтому лучше все же ее контролировать самому, да, это не особо читаемо, в некоторых случаях сложно в реализации , но это в первую очередь СОВМЕСТИМОСТЬ , а во вторую полный контроль...
     
  12. lazybiz

    lazybiz Well-Known Member
    C\C++ Team

    Регистрация:
    3 ноя 2010
    Сообщения:
    1.344
    Симпатии:
    0
    У тебя есть возможность от этих ошибок избавить ксешеньку. Хочешь кого-то чему-то научить? Ну так вперед! Предлагай самое правильное решение.
     
  13. ensane

    ensane Гость

    2DarkKnight125:
    Мсье, тогда уж давайте перейдем на "pure C". Никаких class. Вместо cout и cin - printf/scanf. Да, и фтопку эти новоделы new/delete! malloc() - вот элегантное оружие цивилизованной эпохи.
    Да, у ООП есть свои недостатки, но классы изобрели не на пустом месте. И они удобны. И это удобство одним махом перечеркивает все недостатки. Да, на коротенькой программе студенческой лабораторной этого удобства заметить нельзя. Но приучать нужно с детства. А то потом приходится сталкиваться с ситуацией когда выпускники даже очень хороших ВУЗов оказываются непригодны к практической работе в отрасли программирования.
    Это с каких же пор std оказался "несовместимым"?
    2lazybiz
    Да это я не с целью наезда, а так... наболело...
     
  14. Гость

    ой ой ой
    стоп-машина) вы тут такие проблемы глобальные обсуждаете, я прям теряюсь.
    насчет типа string, нам пока такого не обьясняли. сказали char, мы и юзаем char))
    ________________________________________________________________________________
    lazybiz, можно вопрос?


    как мне сделать, чтоб искало не только по фамилии Иванов, а чтобы искало фамилию, которую я ввожу с клавиатуры??
     
  15. DarkKnight

    DarkKnight Well-Known Member
    C\C++ Team

    Регистрация:
    1 авг 2010
    Сообщения:
    653
    Симпатии:
    0
    От излишних комментариев откажусь...
    Видно вы не совсем поняли о чем я пытался сказать...
    А насчет классов и приучать с детства, напишите тогда разработчикам ОС (начиная от Гейтса, кончая группе Unix), что мол живете в прошлом веке, давно уже нужно в API и в ос включать std::string, а не писать основные строковые данные с байтовой форме завершая их нулевыми символами.....
     
  16. lazybiz

    lazybiz Well-Known Member
    C\C++ Team

    Регистрация:
    3 ноя 2010
    Сообщения:
    1.344
    Симпатии:
    0
    ксешенька
    Конечно.

    Код (C++):
        // ...
    char    poisk[20];
    cout << "Enter surname to search: "; cin >> poisk;
    for( int i = 0; i < 3; i++ ) {
    if ( strcmp( mas[i].get_surname(), poisk ) == 0 ) {
    mas[i].vivod();
    }
    }
    // ...
     
  17. Гость

    спасибо)
    блин, вы все такие умные)
    мне еще пахать и пахать, чтоб шарить что-то нормально)
     
  18. ensane

    ensane Гость

    2DarkKnight125:
    А причем здесь это? Системное программирование на уровне ядра - это как бы C без плюсов по дефолту. И с этим почти никто не спорит. Речь идет о прикладном программировании.
    А вот что произойдет, если добрый препод при приемке вышеприведенной программы решит ввести имя "Рома куча пробелов в строке и еще какая-нибудь лабуда и переполнение буфера однако"?
     
  19. lazybiz

    lazybiz Well-Known Member
    C\C++ Team

    Регистрация:
    3 ноя 2010
    Сообщения:
    1.344
    Симпатии:
    0
    Ответы основаны на вопросах. А если препод скажет: "Ну ни хрена себе! Мы ж такого не проходили! Значит делал не сам!" ???
     
  20. Гость

    еще один глупый вопрос от меня

    надо сделать оператор перегрузки, как это сделать??
    и зачем оно вообще надо?
    нужен оператор типа присваивания или сравнения?
    толком не обьяснили, сказали делайте.

    в конспекте дали пример что-то вроде

    Код (C++):
    bool operator==(int kolichestvo)
    {
    if (kolichestvo==_kolichestvo) return true;
    return false;

    }
    (сравнивали количество стульев в аудиториях) бред какой-то.
     
Загрузка...
Похожие Темы - Задача Классы Определение
  1. Янчик
    Ответов:
    0
    Просмотров:
    473
  2. TrishaRay
    Ответов:
    1
    Просмотров:
    778
  3. elzim
    Ответов:
    0
    Просмотров:
    929
  4. ShaoKahn
    Ответов:
    0
    Просмотров:
    1.114
  5. eremin-sanek
    Ответов:
    3
    Просмотров:
    1.102
Статус темы:
Закрыта.

Поделиться этой страницей