Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 22, средняя оценка - 4.86
Litta
0 / 0 / 0
Регистрация: 22.11.2009
Сообщений: 48
06.05.2010, 17:33     Реализация методов в классе. #1
Программирую на с++ под DOS.Всё, конечно, интересно, но уже месяц не могу разобраться с одной задачкой.
Дан класс "телефонный справочник" с полями : имя и номер, над которыми надо реализовать несколько методов. У меня получается создать массив объектов и вывести на экран.
Но совершенно не понимаю. как реализовать методы:
1-добавить новое имя с номером
2-удалить имя и номер из справочника
3-поиск номера по введённому имени
4-сортировка имён в алфавитном порядкею

При решении 3) и 4) использовала функцию спавнения строк strcmp. МоЯ главная проблема в том, что я не знаю, как объявлять методы, их тип, их параметры, а также , как вызывать их. Могли бы вы привести в качестве примера какие-то фрагменты кода, пожайлуста?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Crudelis
Шаровик затейник
 Аватар для Crudelis
668 / 410 / 13
Регистрация: 06.05.2010
Сообщений: 1,109
06.05.2010, 17:55     Реализация методов в классе. #2
примеру, есть класс студентов:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class Student
{
    char group[50];
    char name[50];
    char fam[50];
    int age;
    char specializ[50];
public:
    void Show()
    {
            cout<<"Фамилия: "<<fam<<endl;
            cout<<"Имя: "<<name<<endl;
            cout<<"Специализация: "<<specializ<<endl;
            cout<<"Возраст: "<<age<<endl;
            cout<<"Возраст: "<<group<<endl;
            cout<<endl;
    }
}
в теле я создают массив:
Student obj[100];
т.е. в структуре у меня будет 100 студентов
для удаления например, нужно создать какой то темп массив к примеру
Student objtemp[100];
перезаписать в него тело obj[100], потом к примеру нужо удалить 50го студета, я в темп сдвигаю весь массив на одного
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
int k=0;
for(int i=0;i<100;i++)
{
if(i==50)
{
objtemp[k]=obj[i];// т.е. при достижении 50 я k не добавляю и как бы сдвигаю массив
}
else
{
objtemp[k]=obj[i];
k++;
}
}
Litta
0 / 0 / 0
Регистрация: 22.11.2009
Сообщений: 48
06.05.2010, 18:38  [ТС]     Реализация методов в классе. #3
Crudelis, спасибо вам)Правда, метод удаления я хотела организовать иначе: в теле метода ввести номер желаемого имени и потом присвоить ему " "(т.е. обнулить).

Вот только до сих пор непонятно, как объявить метод сортировки, что присвоить ему в качестве формального и ФАКТИЧЕСКОГО параметра. Помогите с этим вопросом, Уважаемые форумчане.

Добавлено через 18 минут
а вот и код(только в методе сортирови надо использовать функцию strcpy):

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
#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[i],nname[i+1]);
    if(x<0)
     {c=nname[i];
      nname[i]=nname[i+1];
      nname[i+1]=c;}  }
    for (i=0;i<k;i+=2)
      cout<<nname[i]<<"\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[i])
     cout<<"nomer telephona="<<"\n";
      cout<<ob[i]<<"  "; }
 
    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[i]=="  ";
       for(i=0;i<k;i++)
      cout<<o[i]<<"\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[i].set_name(str);
  cin>>b;
  obj[i].set_nomer(b);
  }
  for(i=0;i<k;i++)
  cout<<"\n"<<obj[i].get_name()<<"  "<<obj[i].get_nomer();
  getch();}
Crudelis
Шаровик затейник
 Аватар для Crudelis
668 / 410 / 13
Регистрация: 06.05.2010
Сообщений: 1,109
06.05.2010, 19:17     Реализация методов в классе. #4
Цитата Сообщение от Litta Посмотреть сообщение
Crudelis, спасибо вам)Правда, метод удаления я хотела организовать иначе: в теле метода ввести номер желаемого имени и потом присвоить ему " "(т.е. обнулить).
хорошо, вы к примеру его обнулишь, а теперь стоит задача вывести всю структуру
т.е.
for(int i=0;i<n;i++)
cout<<"\n"<<obj[i].get_name()<<" "<<obj[i].get_nomer();

как вы поступите в этом случае... а если удалили 10 элементов....... а выводить удаленные не надо... лучше делать методом сдвига с помощью темп массива, при сдвиге делать n-1

Добавлено через 5 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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[i],nname[i+1]);
if(x<0)
{
strcpy(c,nname[i]);
strcpy(nname[i],nname[i+1]);
strcpy(nname[i+1],c);
}
 }
for (i=0;i<k;i+=2)
cout<<nname[i]<<"\n";
}
}
char-овские строки нельзя приравнивать правильно как вы писали через strcp

Добавлено через 3 минуты
а почему вы в сортировке делает прыжок +2? ведь нужно сравнивать все элементы
смотрите вы сравниваете 1 с 2, потом 3 с 4, потом 5 с 6м а вот 2 с 3м вы не сравниваете, 4 с 5м тоже не сравниваете и так далее
Litta
0 / 0 / 0
Регистрация: 22.11.2009
Сообщений: 48
06.05.2010, 19:43  [ТС]     Реализация методов в классе. #5
Crudelis, я забыла исправить эту ошибку.) Сначала брала фрагмент другой работы без ООП, где вначале описывался массив из чередующихся имён и номеров( поэтому и неудачно списала +=2)

А почему-то компилятор жалуется на функцию strcmp- говорит. что нельзя преобразовать int к char *.
А насчёт удаления: забыла исправить ==" " на strcpy(str, " ")
Litta
0 / 0 / 0
Регистрация: 22.11.2009
Сообщений: 48
10.05.2010, 23:27  [ТС]     Реализация методов в классе. #6
Как можно организовать метод добавления нового имени и номера в телеф.справочник?.....пробовала так. но не получилось:

void telephonebook::new_nomer(telephonebook * ob)
{char st[80];int q;
cout<<"vvedite name i nomer:"<<"\n";


for( i=0; i<1; i++)

{gets (st);
ob[i].set_name(st);
cin>>q;
ob[i].set_nomer(q);}

for(i=0;i<=k;i++)
cout<<"\n"<<ob[i].get_name()<<" "<<ob[i].get_nomer();
getch();


} ;
Yandex
Объявления
10.05.2010, 23:27     Реализация методов в классе.
Ответ Создать тему
Опции темы

Текущее время: 18:35. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru