Реализация методов класса.

Тема в разделе "WASM.BEGINNERS", создана пользователем Luna, 6 май 2010.

  1. Luna

    Luna New Member

    Публикаций:
    0
    Регистрация:
    7 ноя 2009
    Сообщения:
    288
    Программирую на с++ под DOS.Всё, конечно, интересно, но уже месяц не могу разобраться с одной задачкой.
    Дан класс "телефонный справочник" с полями : имя и номер, над которыми надо реализовать несколько методов. У меня получается создать массив объектов и вывести на экран.
    Но совершенно не понимаю. как реализовать методы:
    1-добавить новое имя с номером
    2-удалить имя и номер из справочника
    3-поиск номера по введённому имени
    4-сортировка имён в алфавитном порядкею

    При решении 3) и 4) использовала функцию спавнения строк strcmp. МоЯ главная проблема в том, что я не знаю, как объявлять методы, их тип, их параметры, а также , как вызывать их. Могли бы вы привести в качестве примера какие-то фрагменты кода, пожайлуста?
     
  2. Luna

    Luna New Member

    Публикаций:
    0
    Регистрация:
    7 ноя 2009
    Сообщения:
    288
    А вот и код с приличным количеством ошибок:
    #include<iostream.h>
    #include<conio.h>
    #include<stdio.h>
    #include<string.h>
    #define k 3
    int i;
    class telephonebook
    {char name[10];
    int nomer;
    public:
    void set_name(char st[10])
    {strcpy(name,st);}
    void set_nomer(int p)
    {nomer=p;}
    char *get_name()
    {return name;}
    int get_nomer()
    {return nomer;}

    void sort_name(char nname[80]);
    void search_nomer(char ob[80]);
    void new_nomer(char oob[80]);
    void delete_nomer(char o[80]);

    };

    void telephonebook::sort_name(char nname[80])
    {char c;
    int j,x;
    for(j=0;j<k;j+=2)
    for(i=0;i<k;i+=2)
    {x=strcmp(nname,nname[i+1]);
    if(x<0)
    {c=nname;
    nname=nname[i+1];
    nname[i+1]=c;} }
    for (i=0;i<k;i+=2)
    cout<<nname<<"\n";

    }

    void telephonebook::search_nomer(char ob[80])
    {char sss;
    cout<<"vvedite name"<<"\n";
    gets(sss);
    for(i=0;i<k;i++)
    if(!strcmp(sss,ob)
    cout<<"nomer telephona="<<"\n";
    cout<<ob<<" "; }

    void telephonebook::delete_nomer(char o[80])
    {int i;
    cout<<"vvedite nomer of name"<<"\n";
    cin<<i;
    cout<<"\n";
    if (i>k)
    cout<<"error";
    else
    o==" ";
    for(i=0;i<k;i++)
    cout<<o<<"\n";}



    void telephonebook::new_nomer (char *obj)


    void main()
    {

    clrscr();
    char str[10];
    int b;
    telephonebook obj[k];
    for( i=0; i<k; i++)

    {gets (str);
    obj.set_name(str);
    cin>>b;
    obj.set_nomer(b);
    }
    for(i=0;i<k;i++)
    cout<<"\n"<<obj.get_name()<<" "<<obj.get_nomer();
    getch();}
     
  3. Luna

    Luna New Member

    Публикаций:
    0
    Регистрация:
    7 ноя 2009
    Сообщения:
    288
    Забыла исправит: в методе сортировки вместо:
    {c=nname;
    nname=nname[i+1];
    nname[i+1]=c;}
    -функция strcpy.
     
  4. XshStasX

    XshStasX New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2008
    Сообщения:
    991
    метод класса это обычная процедура/функ.
    class My{
    public:

    int/*тип возв. значения*/ mymetod/*имя метода*/ (int param1,int *param2)/*параметры*/
    {
    //реализация метода
    return param1 + *param2;
    }
    };
    int main()
    {
    My m,*m1;/*создаем обьект класса*/
    m1 = &m;
    m.mymetod(); /*вызов метода класса*/
    m1->mymetod(); /*вызов метода класса*/

    }

    А вообще Luna вы не там задали немного вопрос ).
     
  5. Luna

    Luna New Member

    Публикаций:
    0
    Регистрация:
    7 ноя 2009
    Сообщения:
    288
    XshStasX

    да здесь столько вопросов, что и не перечислишь =) ...
    Но главный из всех вопросов: что конкретно написать в качестве формального и фактического параметра в методе поиска?????
     
  6. XshStasX

    XshStasX New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2008
    Сообщения:
    991
    Luna
    А что ты искать будешь, по какому критерию ?) ответь на этот вопрос и узнаешь что искать ;)
     
  7. Luna

    Luna New Member

    Публикаций:
    0
    Регистрация:
    7 ноя 2009
    Сообщения:
    288
    XshStasX

    У нас преподаватель такого же плана строгий)))Чего у неё не спросишь- молчит, как могила. Думает, что каждый самостоятельно всего без вопросов должен добиться-..никогда не улыбается и даже не понимает, что человека иногда, чтобы он добился грандиозногго успеха, капельку надо подтолкнуть..А то в одиночку сидишь на месте в луже- и сдвинуться никуда не можешь. Лучше 1 раз увидеть, чем 1000 раз услышать. ) Тем, кто очень хорошо разбирается в данной сфере, советы приносят огромную пользу, а тем, кто похуже- лучше хоть раз в жизни взглянуть на правильный код и уяснить для себя все вопросы.
     
  8. XshStasX

    XshStasX New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2008
    Сообщения:
    991
    Это все хорошо ;) но я говорю ответь на пост #5 и ты сам все поймешь ;)
    Если хочешь пиши в асю 437_803_640 будет свободное время смогу помочь.
     
  9. Luna

    Luna New Member

    Публикаций:
    0
    Регистрация:
    7 ноя 2009
    Сообщения:
    288
    XshStasX
    так уж и быть- напишу XD..
    (шучу,сама буду мучиться)
     
  10. XshStasX

    XshStasX New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2008
    Сообщения:
    991
    Luna скачай эту книгу http://www.kodges.ru/49890-osvoj-samostoyatelno-c-za-21-den.html надеюсь поможет.
     
  11. Luna

    Luna New Member

    Публикаций:
    0
    Регистрация:
    7 ноя 2009
    Сообщения:
    288
    XshStasX
    О ужжас!- не помогло!!!.....
    ээээээ....-больше никогда не буду заходить на этот сайт.............


    А почему компилятор жалуется на следующее: говорит, что невозможно преобразовать целый тип к указателю на символьный?
    x=strcmp(nname,nname[i+1]);
    if(x<0)
     
  12. Mankubus

    Mankubus New Member

    Публикаций:
    0
    Регистрация:
    14 авг 2009
    Сообщения:
    76
    Luna, потому что.

    Код (Text):
    1. int strcmp ( const char * str1, const char * str2 );
    У вас два символа (читайnt : числа), сравнивайте их напрямую, посредством операции "==".
     
  13. Luna

    Luna New Member

    Публикаций:
    0
    Регистрация:
    7 ноя 2009
    Сообщения:
    288
    Пробовала иначе:
    for(i=0;i<k;i++)
    int strcmp ( str1, str2 );...........

    в ответ на любое вводимое мною имя программа всегда выдаёт номер 1-го объекта
     
  14. Mankubus

    Mankubus New Member

    Публикаций:
    0
    Регистрация:
    14 авг 2009
    Сообщения:
    76
    int strcmp ( const char * str1, const char * str2 ); - это прототип....
     
  15. Luna

    Luna New Member

    Публикаций:
    0
    Регистрация:
    7 ноя 2009
    Сообщения:
    288
    Mankubus
    а внутри метода как сравнить введённое имя с уже имеющимся?у меня -то по идеи правильно организован метод?
    void telephonebook::search_nomer(char ob[80])
    {char sss;
    cout<<"vvedite name"<<"\n";
    gets(sss);
    for(i=0;i<k;i++)
    if(!strcmp(sss,ob)
    cout<<"nomer telephona="<<"\n";
    cout<<ob<<" "; }
     
  16. Mankubus

    Mankubus New Member

    Публикаций:
    0
    Регистрация:
    14 авг 2009
    Сообщения:
    76
    Luna, ваш код непросто понять.

    Код (Text):
    1. char ob[80]
    это вообще что? Типо это у вас массив имен так передается в метод?
     
  17. Luna

    Luna New Member

    Публикаций:
    0
    Регистрация:
    7 ноя 2009
    Сообщения:
    288
    Mankubus
    вообще- именно так XD

    Можно ничего не передавать в качестве фактических параметров?
    void telephonebook::search_nomer()

    В том -то и дело, что я не знаю, что конкретно передать в метод поиска: поле класса name или сами созданные объекты. Нигде толком не объясняется.
    На практике рассматриваются самые простейшие методы- установка значений и вывод на экран.
     
  18. Luna

    Luna New Member

    Публикаций:
    0
    Регистрация:
    7 ноя 2009
    Сообщения:
    288
    Имеется класс телеф.справ-к с полями: имя и номер.
    #include<iostream.h>
    #include<conio.h>
    #include<stdio.h>
    #include<string.h>
    #define k 3
    int i;
    class telephonebook
    {char name[10];
    int nomer;
    public:
    void set_name(char st[10])
    {strcpy(name,st);}
    void set_nomer(int p)
    {nomer=p;}
    char *get_name()
    {return name;}
    int get_nomer()
    {return nomer;}

    void sort_name(char nname[80]);
    void search_nomer();
    char new_nomer(char oob[80]);
    char delete_nomer(char o[80]);

    };
    Не знаю, как правильно организовать метод поиска номера по введённому имени.Написала с ошибками:
    void telephonebook::search_nomer()
    {char sss[80];
    cout<<"vvedite name"<<"\n";
    gets(sss);
    for(i=0;i<k;i++)
    if(strcmp(sss,name)==0)
    cout<<"nomer telephona="<<obj.get_name<<"\n";
    } ;

    Сомневаюсь, с чем сравнивать введённое имя: с полем класса name или с массивом выведенных имён obj.get_name?
    {char sss[80];
    cout<<"vvedite name"<<"\n";
    gets(sss);
    for(i=0;i<k;i++)
    if(strcmp(s , ? ) ==0)
    cout<<"nomer telephona="<< ? <<"\n";
    } ;
     
  19. Luna

    Luna New Member

    Публикаций:
    0
    Регистрация:
    7 ноя 2009
    Сообщения:
    288
    yes, получилось:dntknw:но пока только с поиском)
    #include<iostream.h>
    #include<conio.h>
    #include<stdio.h>
    #include<string.h>
    #define k 3
    int i;
    class telephonebook
    {char name[10];
    int nomer;
    public:
    void set_name(char st[10])
    {strcpy(name,st);}
    void set_nomer(int p)
    {nomer=p;}
    char *get_name()
    {return name;}
    int get_nomer()
    {return nomer;}

    void sort_name(char nname[80]);
    void search_nomer(telephonebook * ob);
    char new_nomer(char oob[80]);
    char delete_nomer(char o[80]);

    };



    void telephonebook::search_nomer(telephonebook * ob)
    {char sss[80];
    cout<<" vvedite name"<<"\n";
    gets(sss);
    for(i=0;i<k;i++)
    if(strcmp(sss,ob.name)==0)
    cout<<"vvedennoe name: "<<ob.name<<" ;nomer telephona="<<ob.nomer<<"\n";
    } ;





    void main()
    {


    char str[10];
    int b;
    telephonebook obj[k];
    for( i=0; i<k; i++)

    {gets (str);
    obj.set_name(str);
    cin>>b;
    obj.set_nomer(b);
    }
    for(i=0;i<k;i++)
    cout<<"\n"<<obj.get_name()<<" "<<obj.get_nomer();
    getch();

    obj.search_nomer(obj) ;


    ..................................................................................................................................
    Ещё вопрос: как добавить новое имя с номером к уже выведенным на экран именам с полями?
     
  20. XshStasX

    XshStasX New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2008
    Сообщения:
    991
    Думал 10 минут над постом #18 то так и не смог понять чего ты хочешь ?)...
    Для начала чтоб проще было понимать что либо тебе и другим людям.
    Для каждой функции определи что именно она должна делать, не на языке программирования а словесно.
    Пример для твоей функ:
    void telephonebook::search_nomer() - Получает в качестве параметра имя номера телефона, по имени номера телефона ищет номер телефона.
    И так для каждой функ.


    Если я правильно прочитал заварку в чае то тебе нужно поле класса name.

    А зря книга полезная там много вещей о С++.
    И что самое главное там в конце каждой главы есть упражнения для проверки знаний.
    Почитав ее этих вопросов не было в таком количестве и такой формулировке.

    P.S
    Лично я б смотрел код в студентов только тогда когда они:
    Опишут словесно назначение каждой(или основных если прога большая) функ.
    Что получает в параметрах,что делает и что возвращает, при этом названия типов каждого параметра не важно.
    Главное понимание смысла этого параметра и его назначения .

    Ибо написания программы на каком либо языке занимает 20-30% всей задачи, остальное время идет на составление решения что есть более важно чем какой либо код.

    Удачи вам