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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
netmare
0 / 0 / 0
Регистрация: 29.10.2013
Сообщений: 7
#1

Передача свойств объектов между функциями - C++

13.11.2013, 00:33. Просмотров 371. Ответов 6
Метки нет (Все метки)

Народ, I need help!
Есть класс:
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class Employees {
public:
    Employees();
    Employees(std::string _Surname, std::string _Name, std::string _Occupation, int _YearOfEmployment);
    int GetYear();
    
    std::string GetName();
    std::string GetSurname();
    std::string GetOccupation();
    void SetName (std::string _Name);
    void SetSurname (std::string _Surname);
    void SetOccupation (std::string _Occupation);
    void SetYear (int _YearOfEmployment);
private:
    std::string Surname;
    std::string Name;
    std::string Occupation;
    int YearOfEmployment;
};

Есть функция 1, которая задает свойства объекта:
Кликните здесь для просмотра всего текста
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
void ManualInput () {
    setlocale(LC_ALL, "Russian");
    std::string nbuf,sbuf,obuf;
    int sName, dbuf;
    Employees Emp3[2];  
    int max = Emp3[0].GetYear();
    for (int i=0;i<2;i++) {
    std::cout << "Введите имя:";
    cin >> nbuf;
    Emp3[i].SetName(nbuf);
    std::cout << "Введите фамилию:";
    cin >> sbuf;
    Emp3[i].SetSurname(sbuf);
    std::cout << "Введите профессию:";
    cin >> obuf;
    Emp3[i].SetOccupation(obuf);
    std::cout << "Введите год приема:";
    cin >> dbuf;
    Emp3[i].SetYear(dbuf);
    std::cout << i << ". " << Emp3[i].GetName() << std::endl;
    }
    for(int i=0;i<2;i++) {
        if(max<Emp3[i].GetYear())
        max=Emp3[i].GetYear();
}
    std::cout << "Последний работник принят в " << max << " году" << std::endl;
}

Есть функция 2, которая по сути дела должна редактировать свойства выбранного объекта:
Кликните здесь для просмотра всего текста
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
void EditEmployess () {
    setlocale(LC_ALL, "Russian");
    int sName, dbuf;
    std::string nbuf,sbuf,obuf;
    Employees Emp3[2];  
    
    std::cout << "Введите номер записи:";
    cin >> sName;
    for (int i=0;i<2;i++){
        if (i == sName) {
    std::cout << "Имя:" <<Emp3[i].GetName() << std::endl;
    std::cout << "Фамилия:" << Emp3[i].GetSurname() << std::endl;
    std::cout << "Должность:" << Emp3[i].GetOccupation() << std::endl;
    std::cout << "Год принятия:" << Emp3[i].GetYear() << std::endl;
    } else { 
        std::cout << "Записи не существует" << std::endl;
        break;
        }
    std::cout << "Введите  имя:";
    cin >> nbuf;
    Emp3[i].SetName(nbuf);
    std::cout << "Введите фамилию:";
    cin >> sbuf;
    Emp3[i].SetSurname(sbuf);
    std::cout << "Введите профессию:";
    cin >> obuf;
    Emp3[i].SetOccupation(obuf);
    std::cout << "Введите год приема:";
    cin >> dbuf;
    Emp3[i].SetYear(dbuf);
    }
}


Проблема в том, что при вызове объекта Emp3[i], почему то не передаются значения, которые мы задавали в функции ввода данных. То есть когда я ввожу номер записи, например 1 - выдает, что записи не существует.
Я никак не могу понять каким образом можно передавать объекты и их свойства между функциями

Заранее спасибо за помощь
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.11.2013, 00:33
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Передача свойств объектов между функциями (C++):

Присваивание объектов одного типа между собой и передача объекта в функцию по значению - C++
При первом знакомстве с С++ усиленно не могу понять вот такие моменты : 1. Имеем вот такой код : class use_string { char...

Чтение свойств нескольких объектов С++ буилдер - C++
Здрасте всем!:) Помогите пожалуйста , только начинаю изучать программирование на С++ , уже неделю пишу свою первую программу :D вообщем...

Базовый класс в иерархии наследования. Вывод свойств объектов - C++
Здрасти. Помогите исправить функцию print_out именно таким образом: void print_out() { void print_out_prop1(); //...

Map с функциями: Как использовать функции в качестве объектов - C++
Создал map, в котором по знаку операции( '^' к примеру) ищется бинарная операция. Вот код. #include &lt;iostream&gt; #include &lt;map&gt; ...

Передача значений переменных функциями - C++
Подскажите пожалуйста, как реализовать эту функцию с помощью указателя (а не ссылки). int clearstr(student&amp; a) { delete a.pi; ...

Передача свойств обьекта в функцию openGL - C++
Здравствуйте уважаемые форумчане..Пришел к вам со следующей нуждой: У меня есть класс тайловой карты. При создании карты...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
zvoronz
271 / 238 / 21
Регистрация: 29.05.2012
Сообщений: 889
13.11.2013, 00:39 #2
Объявление массива
C++
1
Employees Emp3[2];
нужно сделать на глобальном уровне, либо добавить указатель на массив в параметры процедуры
C++
1
void ManualInput (Employees* Emp3)
и
C++
1
void EditEmployess (Employees* Emp3)
. Если добавить параметры то тогда не нужна глобальная переменная массив Emp3.
Из процедур
C++
1
Employees Emp3[2];
нужно будет убрать.
netmare
0 / 0 / 0
Регистрация: 29.10.2013
Сообщений: 7
13.11.2013, 01:00  [ТС] #3
zvoronz, по Вашему совету сделал так:
Кликните здесь для просмотра всего текста
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
void ManualInput (Employees* Emp3) {
    setlocale(LC_ALL, "Russian");
    std::string nbuf,sbuf,obuf;
    int sName, dbuf;
    //Employees Emp3[2];    
    int max = Emp3[0].GetYear();
    for (int i=0;i<2;i++) {
    std::cout << "Введите имя:";
    cin >> nbuf;
    Emp3[i].SetName(nbuf);
    std::cout << "Введите фамилию:";
    cin >> sbuf;
    Emp3[i].SetSurname(sbuf);
    std::cout << "Введите профессию:";
    cin >> obuf;
    Emp3[i].SetOccupation(obuf);
    std::cout << "Введите год приема:";
    cin >> dbuf;
    Emp3[i].SetYear(dbuf);
    std::cout << i << ". " << Emp3[i].GetName() << std::endl;
    }
    for(int i=0;i<2;i++) {
        if(max<Emp3[i].GetYear())
        max=Emp3[i].GetYear();
}
    std::cout << "Последний работник принят в " << max << " году" << std::endl;
}

И так:
Кликните здесь для просмотра всего текста
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
void EditEmployess (Employees* Emp3) {
    setlocale(LC_ALL, "Russian");
    int sName, dbuf;
    std::string nbuf,sbuf,obuf;
    //Employees Emp3[2];    
    
    std::cout << "Введите номер записи:";
    cin >> sName;
    for (int i=0;i<2;i++){
        if (i == sName) {
    std::cout << "Имя:" <<Emp3[i].GetName() << std::endl;
    std::cout << "Фамилия:" << Emp3[i].GetSurname() << std::endl;
    std::cout << "Должность:" << Emp3[i].GetOccupation() << std::endl;
    std::cout << "Год принятия:" << Emp3[i].GetYear() << std::endl;
    } else { 
        std::cout << "Записи не существует" << std::endl;
        break;
        }
    std::cout << "Введите  имя:";
    cin >> nbuf;
    Emp3[i].SetName(nbuf);
    std::cout << "Введите фамилию:";
    cin >> sbuf;
    Emp3[i].SetSurname(sbuf);
    std::cout << "Введите профессию:";
    cin >> obuf;
    Emp3[i].SetOccupation(obuf);
    std::cout << "Введите год приема:";
    cin >> dbuf;
    Emp3[i].SetYear(dbuf);
    }
}


Теперь компилятор выдает ошибку:
C++
1
2
c:\users\netmare\documents\visual studio 2012\projects\lab2\lab2\lab2.cpp(142): error C2660: ManualInput: функция не принимает 0 аргументов
c:\users\netmare\documents\visual studio 2012\projects\lab2\lab2\lab2.cpp(144): error C2660: EditEmployess: функция не принимает 0 аргументов
zvoronz
271 / 238 / 21
Регистрация: 29.05.2012
Сообщений: 889
13.11.2013, 01:20 #4
Ну так в main теперь вот так должно быть
C++
1
2
3
4
5
6
7
8
int main()
{
...
   Employees Emp3[2];
   ManualInput(Emp3);
   EditEmployess(Emp3);
...
}
netmare
0 / 0 / 0
Регистрация: 29.10.2013
Сообщений: 7
13.11.2013, 01:25  [ТС] #5
zvoronz, вроде бы с этим разобрался (видимо я писал ответ одновременно с Вами) - забыл передавать Emp3 при вызове функции. Но проблема в том, что отредактировать можно лишь запись с номером 0, при попытке выбрать другие - "Записи не существует"
zvoronz
271 / 238 / 21
Регистрация: 29.05.2012
Сообщений: 889
13.11.2013, 01:34 #6
C++
1
2
3
4
5
6
7
8
9
10
for (int i=0;i<2;i++){      /////////////////Тут не нужен цикл.
        if (i == sName) {
    std::cout << "Имя:" <<Emp3[i].GetName() << std::endl;
    std::cout << "Фамилия:" << Emp3[i].GetSurname() << std::endl;
    std::cout << "Должность:" << Emp3[i].GetOccupation() << std::endl;
    std::cout << "Год принятия:" << Emp3[i].GetYear() << std::endl;
    } else { 
        std::cout << "Записи не существует" << std::endl;
        break;
        }
Правильный код.
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
void EditEmployess (Employees* Emp3) {
    setlocale(LC_ALL, "Russian");
    int sName, dbuf;
    std::string nbuf,sbuf,obuf;
    
    std::cout << "Введите номер записи:";
    cin >> sName;
    if (sName => 2) {        std::cout << "Записи не существует" << std::endl;
        return;}
    std::cout << "Имя:" <<Emp3[sName].GetName() << std::endl;
    std::cout << "Фамилия:" << Emp3[sName].GetSurname() << std::endl;
    std::cout << "Должность:" << Emp3[sName].GetOccupation() << std::endl;
    std::cout << "Год принятия:" << Emp3[sName].GetYear() << std::endl;
 
    std::cout << "Введите  имя:";
    cin >> nbuf;
    Emp3[sName].SetName(nbuf);
    std::cout << "Введите фамилию:";
    cin >> sbuf;
    Emp3[sName].SetSurname(sbuf);
    std::cout << "Введите профессию:";
    cin >> obuf;
    Emp3[sName].SetOccupation(obuf);
    std::cout << "Введите год приема:";
    cin >> dbuf;
    Emp3[sName].SetYear(dbuf);
    }
}
netmare
0 / 0 / 0
Регистрация: 29.10.2013
Сообщений: 7
13.11.2013, 01:43  [ТС] #7
zvoronz, спасибо огромнейшее Разобрался что к чему
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.11.2013, 01:43
Привет! Вот еще темы с ответами:

С++ Необъявленный идентификатор при работе с классами. (Функция сравнивает значение свойств объектов) - C++
На идентификаторы power top_speed acceleration weight по 4 раза на каждый матюкается компилятор. Как правильно сравнить их содержимое? ...

Работа с функциями, возвращающими значения. Передача параметров по значению - C++
Здравствуйте.Помогите пожалуйста я составил программу а через ссылки не могу.вот условие: Даны отрезки a, b, c и d. Для каждой тройки...

Работа с функциями, возвращающими значения. Передача параметров по значению - C++
Помогите переделать задачу по ссылкам Даны длины a, b и c сторон некоторого треугольника. Найти медианы треугольника, сторонами...

«Работа с функциями, возвращающими значения. Передача параметров по значению» - C++
Прошу помочь очень нужно.. Простым способом . Заранее спасибо) Ссылка на картинку с задачкой : Буду очень благодарен!


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
13.11.2013, 01:43
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru