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

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

Войти
Регистрация
Восстановить пароль
 
Sergey_O
5 / 5 / 1
Регистрация: 09.12.2009
Сообщений: 65
#1

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

12.05.2010, 11:48. Просмотров 473. Ответов 3
Метки нет (Все метки)

Сам класс:
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;
}
Как я понял, функция ввода отлично работает, но если потом делать вывод полей - программа вылетает, вроде как из-за того, что поля оказываются пустыми.

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

Вспомогательный класс для сокращения кода при создании другого класса - C++
Добрый день. Есть код: template&lt;int floor&gt; struct Collection { template&lt;typename T&gt; struct WithBath { ...

Класс: как обратиться к методу производного класса через итератор на базовый класс? - C++
Есть абстрактный и два порожденных. Хочу создать например list&lt;Base*&gt; list1; затем добавляю себе в список: ...

Класс «Комплексное число». Поля класса: действительная и мнимая части - C++
Помогите, описать класс в соответствии с индивидуальным вариантом задания и реализовать все его методы. Каждый класс помимо указанных в...

Класс реализовать с битового поля, предметы через перечисление - C++
Ученики. Ф.И.О., класс (цифра+буква) предметы, оценки, средний балл. Выбор по фамилии, выбор по среднему баллу. Класс реализовать с помощью...

Класс MyString через статические члены класса - C++
Всем доброго времени суток. Возникла необходимость решить задачу, хочу обратиться к знающим людям за подходящим к данной задаче...

Вызов метода производного класса через указатель на базовый класс - C++
Всем привет ! Подскажите почему , при выполнении строки 45 я получаю ошибку ? А именно при выполнении выражения c-&gt;fnz() ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
лендер
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 );
0
Sergey_O
5 / 5 / 1
Регистрация: 09.12.2009
Сообщений: 65
12.05.2010, 12:58  [ТС] #3
всё работает, огромное спасибо.
совершенно забыл про правила работы с параметром функции.
0
лендер
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 не инициализировано, или ты пытаешся освободить из под его память но не выделил ее...
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.05.2010, 13:15
Привет! Вот еще темы с ответами:

Есть класс A и класс B, класс B вложен в класс A и вложен в него, как классу B получить доступ к переменным класса A просто по имени? - C++
На самом деле ничё фантастического я не прошу, ведь: template &lt;class T&gt; class matrix { friend class diagonal; ...

Класс: Реализация через битовое поле класса "Множество" - C++
Реализация через битовое поле. Как сделать ввод и вывод множества и так чтобы элементы хранились в отсортированном порядке? #include...

Использование в качестве поля класса указатель на объект другого класса - C++
Ошибка в названии - &quot;указателЯ&quot; Вот, пытаюсь освоить ООП (пока только учусь): создаю класс person (человек) и car (модель машины). ...

Друзья, подскажите, говорят, что можно поля класса инициализировать в момент объявления класса. Как это сделать? - C++
Скажу сразу, а то сейчас начнется, что я прекрасно понимаю, что поля класса при объявлении инициализировать нельзя. Можно конструктором при...


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

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

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