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

Запись в поля класса через вспомогательный класс. - C++

Восстановить пароль Регистрация
 
Sergey_O
 Аватар для Sergey_O
5 / 5 / 1
Регистрация: 09.12.2009
Сообщений: 65
12.05.2010, 11:48     Запись в поля класса через вспомогательный класс. #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
#pragma once
#include <iostream>
class User
{
private:
    char *_Surname;
    char *_Name;
    char *_SecondName;
    char *_TelephoneNumber;
    char *_Login;
    char *_Password;
    int Identificator;
public:
    User(void){};
    void name_get(char *src);
    void surname_get(char *src);
    void secondname_get(char *src);
    void telnumber_get(char *src);
    void login_get(char *src);
    void pass_get(char *src);
    void id_get(int id);
    ~User(void);
};
Определение методов:
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
#include "User.h"
 
#include <iostream>
using namespace std;
 
User::~User(void)
{
}
 
void User::name_get(char *src)
{
    _Name = new char[strlen(src)];
    strcpy(_Name,src);
}
 
void User::secondname_get(char *src)
{
    _SecondName = new char[strlen(src)];
    strcpy(_SecondName,src);
}
 
void User::surname_get(char *src)
{
    _Surname = new char[strlen(src)];
    strcpy(_Surname,src);
}
void User::telnumber_get(char *src)
{
    _TelephoneNumber = new char[strlen(src)];
    strcpy(_TelephoneNumber,src);
}
void User::login_get(char *src)
{
    _Login = new char[strlen(src)];
    strcpy(_Login,src);
}
void User::pass_get(char *src)
{
    _Password = new char[strlen(src)];
    strcpy(_Password,src);
}
void User::id_get(int id)
{
    Identificator = id;
}
Вспомогательный класс, который должен заполнять поля USERа:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class enter
{
public:
void get(User src)
{
    char *temp = new char[20];
    char *def = new char[20];
    cout<<"Name: ";scanf("%s",&temp);
    src.name_get(temp);
    cout<<"Second name: ";scanf("%s",&temp);
    src.secondname_get(temp);
    cout<<"Surname: ";scanf("%s",&temp);
    src.surname_get(temp);
    cout<<"Tel number: ";scanf("%s",&temp);
    src.telnumber_get(temp);
    //delete temp;
    cout<<"Login: ";scanf("%s",&def);
    src.login_get(def);
    cout<<"Password: ";scanf("%s",&def);
    //delete def;
}
Как я понял, функция ввода отлично работает, но если потом делать вывод полей - программа вылетает, вроде как из-за того, что поля оказываются пустыми.

Буду благодарен за помощь.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.05.2010, 11:48     Запись в поля класса через вспомогательный класс.
Посмотрите здесь:

В конструкторе вложенного класса инициализируется приватное поле. Потом вызывается функция-метод этого класса и выводит значение этого поля НО НЕ ТО! C++
Класс: Реализация через битовое поле класса "Множество" C++
C++ Друзья, подскажите, говорят, что можно поля класса инициализировать в момент объявления класса. Как это сделать?
Как обраиться к функции класса через другую функцию класса (друга)? C++
Обращение к методам класса через указатель на экземпляр класса C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
лендер
46 / 46 / 2
Регистрация: 12.01.2010
Сообщений: 183
12.05.2010, 12:33     Запись в поля класса через вспомогательный класс. #2
C++
1
void get(User src)
смени на
C++
1
void get(User *src)
и вмето точек в методе get поставь ->

поскольку ты передаеш в функцию обект то в функции работаеш с его копией и надо возвращять значения,
или же как в моем примере в качестве параметра передавай адрес объекта и работай напрямую с им через его указатель


пример вызова метода:
C++
1
2
3
User t;
enter e;
  e.get( &t );
Sergey_O
 Аватар для Sergey_O
5 / 5 / 1
Регистрация: 09.12.2009
Сообщений: 65
12.05.2010, 12:58  [ТС]     Запись в поля класса через вспомогательный класс. #3
всё работает, огромное спасибо.
совершенно забыл про правила работы с параметром функции.
лендер
46 / 46 / 2
Регистрация: 12.01.2010
Сообщений: 183
12.05.2010, 13:15     Запись в поля класса через вспомогательный класс. #4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void get(User src)
{
        char *temp = new char[20];
        char *def = new char[20];
        cout<<"Name: ";scanf("%s",&temp);
        src.name_get(temp);
        cout<<"Second name: ";scanf("%s",&temp);
        src.secondname_get(temp);
        cout<<"Surname: ";scanf("%s",&temp);
        src.surname_get(temp);
        cout<<"Tel number: ";scanf("%s",&temp);
        src.telnumber_get(temp);
        //delete temp;
        cout<<"Login: ";scanf("%s",&def);
        src.login_get(def);
        cout<<"Password: ";scanf("%s",&def);
        //delete def;                                //     <-------тут не вызван метод инициализации
}


может ето из-за того чтово что поле _Password не инициализировано, или ты пытаешся освободить из под его память но не выделил ее...
Yandex
Объявления
12.05.2010, 13:15     Запись в поля класса через вспомогательный класс.
Ответ Создать тему
Опции темы

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