Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/9: Рейтинг темы: голосов - 9, средняя оценка - 4.56
0 / 0 / 0
Регистрация: 05.01.2015
Сообщений: 9

Функция - метода класса для определения совпадения имени человека с некоторым заданным

17.01.2015, 09:48. Показов 2079. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Объявите класс TMan, создающий тип – человека.
Элементы – данные класса – имя, возраст человека.
Предусмотрите конструкторы класса:
- по умолчанию;
- получающий параметры;
- получающий параметр –ссылку на класс TMan.
Напишите функции – методы класса для:
- ввода – вывода данных о человеке;
- определения, является ли человек избирателем, если учитывать только его возраст;
- определения совпадения имени человека с некоторым заданным.
Напишите программу, в которой создайте массив объектов типа TMan, заполните его в диалоговом режиме, выведите сначала исходный массив, а затем всех избирателей с заданной фамилией.
Примечание:
Массив объектов класса может быть создан как статически, так и динамически. Объекты класса, которые будет содержать массив, обязательно должны иметь конструкторы по умолчанию. При создании массива объектов класса для каждого объекта массива будет вызван конструктор по умолчанию.

??? Вопрос как выглядит функция - метода класса для определения совпадения имени человека с некоторым заданным.

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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
#include <iostream>
#include <string.h>
 
using namespace std;
 
class TMan
{    
      char* _name;
      int _age;
 
public:
       TMan();
       TMan(char* name, int age);
       TMan(const TMan& a);
       ~TMan();
       
       void set();
       void out();
       bool TMan::is_age_high(const int& value);
};
 
      TMan::TMan()//по умолчанию
      {
             _name = "NULL";
             _age=0;
      }
      
      TMan::TMan(char* name, int age) //с параметрами
      {
                       _name=strcpy(new char[strlen(name) + 1], name);
                       _age=age;
      }
      
      TMan::TMan(const TMan& a)//копирования
      {
          _name=a._name;
          _age=a._age;
      }
 
      TMan::~TMan()//деструктор
      {
             delete [] _name;
      }
     
      void TMan::set()//ф-я ввода
      {
              int age;
              char name[40];
              cout<<"Enter name\n";
              cin>>name;
              delete [] _name;
              _name = strcpy(new char[strlen(name) + 1], name);
              
              cout<<"Enter age\n";
              cin>>age;
              _age = age;
     }
          
     void TMan::out()//ф-я вывода
     {
                cout<<"Name\n"<<_name<<"\n";
                cout<<"Age\n"<<_age<<"\n";
     }
     
     bool TMan::is_age_high(const int& value)//ф-я поиска возраста
     {
          return(_age>value);
     }
 
int main()
{
    cout<<"TMan A: Po umolchaniyu\n";
    TMan A();
    cout << "TMan B: S parametramy\n";
    TMan B("TMan", 2); 
    cout << "TMan C: Konstructor kopirovanya\n";
    TMan C (B);
 
    
    int size;
    do
    {
        cout << "Enter Count Array of Objects\n";
        cin >> size;
        if (size < 0)
            cout << "ERROR\n";
    }
    while (size < 0);
    cin.get();
    
    TMan* TMans = new TMan [size];//заполнение массива
    for (int i = 0; i < size; ++i)
        TMans[i].set();
    cout << '\n';
 
    int age;//поиск избирателя по возрасту
    do
    {
        cout << "Enter age of search izbirateley\n";
        cin >> age;
        if (size < 0)
            cout << "ERROR\n";
    }
    while (age < 0);
    cin.get();
    cout << '\n';
    cout << "Izbiratelyamy mogut bit':\n";
    for (int i = 0; i < size; ++i)
    {
        if (TMans[i].is_age_high(age))
            TMans[i].out();
    }
    
    system ("pause");
    
    delete [] TMans;
    return 0;
}
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
17.01.2015, 09:48
Ответы с готовыми решениями:

Создание юнит теста для проверки сборки (.dll, .exe) на наличие класса с заданным именем, который содержит 3 метода
Здравствуйте! Помогите создать юнит теста для проверки сборки (.dll, .exe) на наличие класса с заданным именем, который содержит 3 метода....

Функция определения пола по имени
Здравствуйте. Что-то никак не поддается мне решение данной задачи: «Напишите функцию, которая примет имя человека, а возвратит пол,...

Передача метода класса в качестве параметра для метода другого класса
Здравствуйте, Передо мной стоит такая задача. Необходимо разработать механизм, который бы мог прервать любую функцию, при этом абсолютна...

13
Модератор
Эксперт С++
 Аватар для zss
13771 / 10964 / 6491
Регистрация: 18.12.2011
Сообщений: 29,242
17.01.2015, 09:51
C++
1
2
3
4
bool TMan::is_name_equal(char* _name)//ф-я поиска имени
     {
          return (strcmp(name,_name)==0);
     }
Кстати, учтите ПРАВИЛО ТРЕХ:
Распространенные ошибки
1
0 / 0 / 0
Регистрация: 05.01.2015
Сообщений: 9
17.01.2015, 10:43  [ТС]
А что записать в главной функции, чтоб все заработало?
0
Модератор
Эксперт С++
 Аватар для zss
13771 / 10964 / 6491
Регистрация: 18.12.2011
Сообщений: 29,242
17.01.2015, 10:58
Это же Вы смогли написать:
Цитата Сообщение от yulia_mashinets Посмотреть сообщение
C++
1
2
if (TMans[i].is_age_high(age)) 
    TMans[i].out();
В чем тогда трудность?
0
0 / 0 / 0
Регистрация: 05.01.2015
Сообщений: 9
17.01.2015, 11:19  [ТС]
Не понимаю саму идею этой функции поиска имени, со значениями int-ого типа ясно как, а с массивом char нет. Ну не может же быть, что просто заменить значения? Чепуха.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
int name;
do
    {
        cout << "Enter name of search \n";
        cin >> name;
        if (size < 0)
            cout << "ERROR\n";
    }
    while (name < 0);
    cin.get();
    cout << '\n';
    cout << "Searching for TMan with name \n";
    for (int i = 0; i < size; ++i)
    {
        if (TMans[i].is_name_equal(name))
            TMans[i].out();
    }
0
0 / 0 / 0
Регистрация: 05.01.2015
Сообщений: 9
17.01.2015, 14:12  [ТС]
Объявите класс TMan, создающий тип – человека.
Элементы – данные класса – имя, возраст человека.
Предусмотрите конструкторы класса:
- по умолчанию;
- получающий параметры;
- получающий параметр –ссылку на класс TMan.
Напишите функции – методы класса для:
- ввода – вывода данных о человеке;
- определения, является ли человек избирателем, если учитывать только его возраст;
- определения совпадения имени человека с некоторым заданным.
Напишите программу, в которой создайте массив объектов типа TMan, заполните его в диалоговом режиме, выведите сначала исходный массив, а затем всех избирателей с заданной фамилией.
Примечание:
Массив объектов класса может быть создан как статически, так и динамически. Объекты класса, которые будет содержать массив, обязательно должны иметь конструкторы по умолчанию. При создании массива объектов класса для каждого объекта массива будет вызван конструктор по умолчанию.

Проблемы с последней функцией поиска имени, как устроить?

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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
#include <iostream>
#include <string.h>
 
using namespace std;
 
class TMan
{    
      char* _name;
      int _age;
 
public:
       TMan();
       TMan(char* name, int age);
       TMan(const TMan& a);
       ~TMan();
       
       void set();
       void out();
       bool TMan::is_age_high(const int& value);
       bool TMan::is_name_equal(char* _name);
};
 
      TMan::TMan()//по умолчанию
      {
             _name = "NULL";
             _age=0;
      }
      
      TMan::TMan(char* name, int age) //с параметрами
      {
                       _name=strcpy(new char[strlen(name) + 1], name);
                       _age=age;
      }
      
      TMan::TMan(const TMan& a)//копирования
      {
          _name=a._name;
          _age=a._age;
      }
 
      TMan::~TMan()//деструктор
      {
             delete [] _name;
      }
     
      void TMan::set()//ф-я ввода
      {
              int age;
              char name[40];
              cout<<"Enter name\n";
              cin>>name;
              delete [] _name;
              _name = strcpy(new char[strlen(name) + 1], name);
              
              cout<<"Enter age\n";
              cin>>age;
              _age = age;
     }
          
     void TMan::out()//ф-я вывода
     {
                cout<<"Name\n"<<_name<<"\n";
                cout<<"Age\n"<<_age<<"\n";
     }
     
     bool TMan::is_age_high(const int& value)//ф-я поиска возраста
     {
          return(_age>value);
     }
 
     bool TMan::is_name_equal(char* _name)//ф-я поиска имени
     {
          return (strcmp(name,_name)==0);
     }
 
int main()
{
    cout<<"TMan A: Po umolchaniyu\n";
    TMan A();
    cout << "TMan B: S parametramy\n";
    TMan B("TMan", 2); 
    cout << "TMan C: Konstructor kopirovanya\n";
    TMan C (B);
 
    
    int size;
    do
    {
        cout << "Enter Count Array of Objects\n";
        cin >> size;
        if (size < 0)
            cout << "ERROR\n";
    }
    while (size < 0);
    cin.get();
    
    TMan* TMans = new TMan [size];//заполнение массива
    for (int i = 0; i < size; ++i)
        TMans[i].set();
    cout << '\n';
 
    int age;//поиск избирателя по возрасту
    do
    {
        cout << "Enter age of search izbirateley\n";
        cin >> age;
        if (size < 0)
            cout << "ERROR\n";
    }
    while (age < 0);
    cin.get();
    cout << '\n';
    cout << "Izbiratelyamy mogut bit':\n";
    for (int i = 0; i < size; ++i)
    {
        if (TMans[i].is_age_high(age))
            TMans[i].out();
    }
    
    system ("pause");
    
    delete [] TMans;
    return 0;
}
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
17.01.2015, 14:48
Вводишь имя. Затем в цикле проходишь по массиву и вызываешь эту функцию, указывая введённое имя, и анализируешь результат.
1
Модератор
Эксперт С++
 Аватар для zss
13771 / 10964 / 6491
Регистрация: 18.12.2011
Сообщений: 29,242
17.01.2015, 18:15
Почему чепуха? Задачу сравнения возложили на функцию.
А уж функция сравнивает с помощью строковой функции strcmp,
которая возвращает ноль, если строки совпадают.
0
0 / 0 / 0
Регистрация: 05.01.2015
Сообщений: 9
18.01.2015, 10:09  [ТС]
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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
#include <iostream>
#include <string.h>
 
using namespace std;
 
class TMan
{    
      char* _name;
      int _age;
 
public:
       TMan();
       TMan(char* name, int age);
       TMan(const TMan& a);
       ~TMan();
       
       void set();
       void out();
       bool TMan::is_age_high(const int& value);
       bool TMan::is_name_equal(char* _name);
};
 
      TMan::TMan()
      {
             _name = "NULL";
             _age=0;
      }
      
      TMan::TMan(char* name, int age) 
      {
                       _name=strcpy(new char[strlen(name) + 1], name);
                       _age=age;
      }
      
      TMan::TMan(const TMan& a)
      {
          _name=a._name;
          _age=a._age;
      }
 
      TMan::~TMan()
      {
             delete [] _name;
      }
     
      void TMan::set()
      {
              int age;
              char name[40];
              cout<<"Enter name\n";
              cin>>name;
              delete [] _name;
              _name = strcpy(new char[strlen(name) + 1], name);
              
              cout<<"Enter age\n";
              cin>>age;
              _age = age;
     }
          
     void TMan::out()
     {
                cout<<"Name\n"<<_name<<"\n";
                cout<<"Age\n"<<_age<<"\n";
     }
     
     bool TMan::is_age_high(const int& value)
     {
          return(_age>value);
     }
     
     bool TMan::is_name_equal(char* _name)
     {
          return (strcmp(name,_name)==0);
     }
     
int main()
{
    cout<<"TMan A: Po umolchaniyu\n";
    TMan A();
    cout << "TMan B: S parametramy\n";
    TMan B("TMan", 2);
    cout << "TMan C: Konstructor kopirovanya\n";
    TMan C (B);
 
    int size;
    do
    {
        cout << "Enter Count Array of Objects\n";
        cin >> size;
        if (size < 0)
            cout << "ERROR\n";
    }
    while (size < 0);
    cin.get();
    
    TMan* TMans = new TMan [size];
    for (int i = 0; i < size; ++i)
        TMans[i].set();
    cout << '\n';
 
    int age;
    do
    {
        cout << "Enter age of search izbirateley\n";
        cin >> age;
        if (size < 0)
            cout << "ERROR\n";
    }
    while (age < 0);
    cin.get();
    cout << '\n';
    cout << "Izbiratelyamy mogut bit':\n";
    for (int i = 0; i < size; ++i)
    {
        if (TMans[i].is_age_high(age))
            TMans[i].out();
    }
    
    int name;
    do
    {
        cout << "Enter name of search \n";
        cin >> name;
        if (size < 0)
            cout << "ERROR\n";
    }
    while (name < 0);
    cin.get();
    cout << '\n';
    cout << "Searching for TMan with name \n";
    for (int i = 0; i < size; ++i)
    {
        if (TMans[i].is_name_equal(name))
            TMans[i].out();
    }
               
    system ("pause");
    
    delete [] TMans;
    return 0;
}
Работаю в Dev-C++, компилятор выдал ошибки:
In member function `bool TMan::is_name_equal(char*)':
73 - `name' undeclared (first use this function)

In function `int main()':
133 - invalid conversion from `int' to `char*'
133 - initializing argument 1 of `bool TMan::is_name_equal(char*)'

С первой ошибкой еще ясно, что поменять, чтобы исправить последние?
0
0 / 0 / 0
Регистрация: 05.01.2015
Сообщений: 9
18.01.2015, 10:10  [ТС]
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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
#include <iostream>
#include <string.h>
 
using namespace std;
 
class TMan
{    
      char* _name;
      int _age;
 
public:
       TMan();
       TMan(char* name, int age);
       TMan(const TMan& a);
       ~TMan();
       
       void set();
       void out();
       bool TMan::is_age_high(const int& value);
       bool TMan::is_name_equal(char* _name);
};
 
      TMan::TMan()
      {
             _name = "NULL";
             _age=0;
      }
      
      TMan::TMan(char* name, int age) 
      {
                       _name=strcpy(new char[strlen(name) + 1], name);
                       _age=age;
      }
      
      TMan::TMan(const TMan& a)
      {
          _name=a._name;
          _age=a._age;
      }
 
      TMan::~TMan()
      {
             delete [] _name;
      }
     
      void TMan::set()
      {
              int age;
              char name[40];
              cout<<"Enter name\n";
              cin>>name;
              delete [] _name;
              _name = strcpy(new char[strlen(name) + 1], name);
              
              cout<<"Enter age\n";
              cin>>age;
              _age = age;
     }
          
     void TMan::out()
     {
                cout<<"Name\n"<<_name<<"\n";
                cout<<"Age\n"<<_age<<"\n";
     }
     
     bool TMan::is_age_high(const int& value)
     {
          return(_age>value);
     }
     
     bool TMan::is_name_equal(char* _name)
     {
          return (strcmp(name,_name)==0);
     }
     
int main()
{
    cout<<"TMan A: Po umolchaniyu\n";
    TMan A();
    cout << "TMan B: S parametramy\n";
    TMan B("TMan", 2);
    cout << "TMan C: Konstructor kopirovanya\n";
    TMan C (B);
 
    int size;
    do
    {
        cout << "Enter Count Array of Objects\n";
        cin >> size;
        if (size < 0)
            cout << "ERROR\n";
    }
    while (size < 0);
    cin.get();
    
    TMan* TMans = new TMan [size];
    for (int i = 0; i < size; ++i)
        TMans[i].set();
    cout << '\n';
 
    int age;
    do
    {
        cout << "Enter age of search izbirateley\n";
        cin >> age;
        if (size < 0)
            cout << "ERROR\n";
    }
    while (age < 0);
    cin.get();
    cout << '\n';
    cout << "Izbiratelyamy mogut bit':\n";
    for (int i = 0; i < size; ++i)
    {
        if (TMans[i].is_age_high(age))
            TMans[i].out();
    }
    
    int name;
    do
    {
        cout << "Enter name of search \n";
        cin >> name;
        if (size < 0)
            cout << "ERROR\n";
    }
    while (name < 0);
    cin.get();
    cout << '\n';
    cout << "Searching for TMan with name \n";
    for (int i = 0; i < size; ++i)
    {
        if (TMans[i].is_name_equal(name))
            TMans[i].out();
    }
               
    system ("pause");
    
    delete [] TMans;
    return 0;
}
Работаю в Dev-C++, компилятор выдал ошибки:
In member function `bool TMan::is_name_equal(char*)':
87 - `name' undeclared (first use this function)

In function `int main()':
147 - invalid conversion from `int' to `char*'
147 - initializing argument 1 of `bool TMan::is_name_equal(char*)'

С первой ошибкой еще ясно, что поменять, чтобы исправить последние?

Добавлено через 6 минут
Ошибки в строках 73 и 133
0
 Аватар для saden
184 / 168 / 53
Регистрация: 27.01.2013
Сообщений: 788
18.01.2015, 10:24
bool TMan::is_name_equal(char* _name) -> bool TMan::is_name_equal(char* name)

Добавлено через 7 минут
в строке 73
1
Модератор
Эксперт С++
 Аватар для zss
13771 / 10964 / 6491
Регистрация: 18.12.2011
Сообщений: 29,242
18.01.2015, 10:36
Если хотите использовать одинаковые имена для переменных - членов класса
и для параметров функции, то к членам класса придется добавить префикс this->
C++
1
2
3
4
 bool TMan::is_name_equal(char* _name)
     {
          return (strcmp(this->_name,_name)==0);
     }
1
0 / 0 / 0
Регистрация: 05.01.2015
Сообщений: 9
18.01.2015, 12:06  [ТС]
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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
#include <iostream>
#include <string.h>
 
 
using namespace std;
 
class TMan//создается класс, определяющий человека
{    
      char* _name;
      int _age;
 
public:
       TMan();
       TMan(char* name, int age);
       TMan(const TMan& a);
       ~TMan();
       
       void set();
       void out();
       bool TMan::is_age_high(const int& value);
       bool TMan::is_name_equal(char* _name);
};
 
      TMan::TMan()//конструктор по умолчанию
      {
             _name = "NULL";
             _age=0;
      }
      
      TMan::TMan(char* name, int age) //конструктор с параметрами
      {
                      _name=strcpy(new char[strlen(name) + 1], name);
                      _age=age;
      }
      
      TMan::TMan(const TMan& a)//конструктор копирования
      {
          _name=a._name;
          _age=a._age;
      }
 
      TMan::~TMan()//деструктор
      {
             delete [] _name;
      }
     
      void TMan::set()//функция ввода
      {
              int age;
              char name[40];
              cout<<"Enter name\n";
              cin>>name;
              delete [] _name;
              _name = strcpy(new char[strlen(name) + 1], name);
              
              cout<<"Enter age\n";
              cin>>age;
              _age = age;
     }
          
     void TMan::out()//функция вывода
     {
                cout<<"Name\n"<<_name<<"\n";
                cout<<"Age\n"<<_age<<"\n";
     }
     
     bool TMan::is_age_high(const int& value)//функция поиска возраста
     {
          return(_age>value);
     }
     
     bool TMan::is_name_equal(char* _name)//функция поиска имени
     {
          return (strcmp(this->_name,_name)==0);
     }
     
int main()
{
    cout<<"TMan A: Po umolchaniyu\n";
    TMan A();//вывод значения объекта на экран
    cout << "TMan B: S parametramy\n";
    TMan B("TMan", 2); //конструктор с параметрами
    cout << "TMan C: Konstructor kopirovanya\n";
    TMan C (B);//конструктор копирования
 
    int size;
    do
    {
        cout << "Enter Count Array of Objects\n";
        cin >> size;
        if (size < 0)
            cout << "ERROR\n";
    }
    while (size < 0);
    cin.get();
    
    TMan* TMans = new TMan [size];//заполнение массива
    for (int i = 0; i < size; ++i)
        TMans[i].set();
    cout << '\n';
 
    int age;//поиск избирателей по возрасту
    do
    {
        cout << "Enter age of search izbirateley\n";
        cin >> age;
        if (size < 0)
            cout << "ERROR\n";
    }
    while (age < 0);
    cin.get();
    cout << '\n';
    cout << "Izbiratelyamy mogut bit':\n";
    for (int i = 0; i < size; ++i)
    {
        if (TMans[i].is_age_high(age))
            TMans[i].out();
    }
    
    char* name;
    do
    {
        cout << "Enter name of search \n";
        cin >> name;
        if (size < 0)
            cout << "ERROR\n";
    }
    while (name < 0);
    cin.get();
    cout << '\n';
    cout << "Searching for TMan with name \n";
    for (int i = 0; i < size; ++i)
    {
        if (TMans[i].is_name_equal(name))
            TMans[i].out();
    }
               
    system ("pause");
    
    delete [] TMans;
    return 0;
}
С последними ошибками разобралась, но все равно не работает
0
Модератор
Эксперт С++
 Аватар для zss
13771 / 10964 / 6491
Регистрация: 18.12.2011
Сообщений: 29,242
18.01.2015, 12:31
Лучший ответ Сообщение было отмечено yulia_mashinets как решение

Решение

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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
#include <iostream>
#include <string.h>
 
 
using namespace std;
 
class TMan//создается класс, определяющий человека
{    
      char* _name;
      int _age;
 
public:
       TMan();
       TMan(char* name, int age);
       TMan(const TMan& a);
       ~TMan();
       
       TMan& operator=(const TMan& a);
       void set();
       void out();
       bool TMan::is_age_high(const int& value);
       bool TMan::is_name_equal(char* _name);
};
 
      TMan::TMan()//конструктор по умолчанию
      {
             _name = NULL;
             _age=0;
      }
      
      TMan::TMan(char* name, int age) //конструктор с параметрами
      {
            _name=new char[strlen(name) + 1];
            strcpy(_name, name);
            _age=age;
      }
      
      TMan::TMan(const TMan& a)//конструктор копирования
      {
           _name=new char[strlen(a._name) + 1];
           strcpy(_name, a._name);
           _age=a._age;
      }
      TMan& TMan::operator=(const TMan& a)
      {
           _name=new char[strlen(a._name) + 1];
           strcpy(_name, a._name);
           _age=a._age;
           return *this;
      }
 
      TMan::~TMan()//деструктор
      {
          if(_name!=NULL)
             delete[] _name;
      }
     
      void TMan::set()//функция ввода
      {
              int age;
              char name[40];
              cout<<"Enter name\n";
              cin>>name;
              if(_name!=NULL)
                 delete[] _name;
              _name=new char[strlen(name) + 1];
              strcpy(_name, name);
              
              cout<<"Enter age\n";
              cin>>age;
              _age = age;
     }
          
     void TMan::out()//функция вывода
     {
                cout<<"Name\n"<<_name<<"\n";
                cout<<"Age\n"<<_age<<"\n";
     }
     
     bool TMan::is_age_high(const int& value)//функция поиска возраста
     {
          return(_age>value);
     }
     
     bool TMan::is_name_equal(char* _name)//функция поиска имени
     {
          return (strcmp(this->_name,_name)==0);
     }
     
int main()
{
    cout<<"TMan A: Po umolchaniyu\n";
    TMan A;//вывод значения объекта на экран
    cout << "TMan B: S parametramy\n";
    TMan B("TMan", 2); //конструктор с параметрами
    cout << "TMan C: Konstructor kopirovanya\n";
    TMan C(B);//конструктор копирования
 
    int size;
    do
    {
        cout << "Enter Count Array of Objects\n";
        cin >> size;
        if (size < 0)
            cout << "ERROR\n";
    }
    while (size < 0);
    cin.get();
    
    TMan* TMans = new TMan [size];//заполнение массива
    for (int i = 0; i < size; ++i)
        TMans[i].set();
    cout << '\n';
 
    int age;//поиск избирателей по возрасту
    do
    {
        cout << "Enter age of search izbirateley\n";
        cin >> age;
        if (size < 0)
            cout << "ERROR\n";
    }
    while (age < 0);
    cin.get();
    cout << '\n';
    cout << "Izbiratelyamy mogut bit':\n";
    for (int i = 0; i < size; ++i)
    {
        if (TMans[i].is_age_high(age))
            TMans[i].out();
    }
    
    char name[40];
    do
    {
        cout << "Enter name of search \n";
        cin >> name;
        if (size < 0)
            cout << "ERROR\n";
    }
    while (name < 0);
    cin.get();
    cout << '\n';
    cout << "Searching for TMan with name \n";
    for (int i = 0; i < size; ++i)
    {
        if (TMans[i].is_name_equal(name))
            TMans[i].out();
    }
               
    system ("pause");
    
    delete [] TMans;
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
18.01.2015, 12:31
Помогаю со студенческими работами здесь

Синтаксис определения метода специализии шаблона класса.
Есть некий шаблон класса: template &lt;typename T1, typename T2, typename T3&gt; class А { }; Есть специализация этого шаблона и в нём некий...

Получить значения проперти/метода класса по имени
Т.е. допустим есть класс: Class MyClass public test as String public Function getTest2() as String getTest2=&quot;1&quot; End...

Какими клавишами можно перейти из определения метода класса к его объявлению
Здравствуйте уважаемые, пытался гуглить, так и не нашел, может кто подскажет, в MVS 2013 есть горячие клавишы которые позволяют при...

Нейронная сеть для определения профессии человека
Всем доброго времени суток. Стоит задача сделать программу, где пользователь будет проходить тест, допустим из 20 вопросов. На каждом...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru