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

Ввод и вывод данных класса - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.78
dima6920
0 / 0 / 0
Регистрация: 03.08.2010
Сообщений: 23
31.08.2010, 12:56     Ввод и вывод данных класса #1
Привет уважаемые гуру!
Я к вам с очередным вопросом
Нужно вывести данные класса Store :
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
#include <stdio.h>
#include <iostream.h>
#include <String.h>
#include "Store.h"
 
 
Store::Store()
{
 
}
 
Store::~Store()
{
 
}
void Store::setAll(char *name,char *owner,char *adress,float open,float close)
{
    printf("Enter a name for a store:");
    this->name=name;
    gets(name);
 
    printf("Enter a name for a owner:");
    this->owner=owner;
    gets(owner);
 
    printf("Enter a Adress for a store:");
    this->adress=adress;
    gets(adress);
 
    printf("Enter a Openning Hour for a store:");
    this->open=open;
    scanf("%f",&open);
 
    printf("Enter a Closing Hour for a store:");
    this->close=close;
    scanf("%f",&close);
}
char *Store::getName()
{
    return name;
}
char *Store::getOwner()
{
    return owner;
}
char *Store::getAdress()
{
    return adress;
}
float Store::getOpen()
{
    return open;
}
float Store::getClose()
{
    return close;
}
 
void Store::printAll()
{
    printf("The Name of store is:");
    puts(getName());
 
    printf("\nThe Owner of store is:");
    puts(getOwner());
 
    printf("\nThe Adress of store is:");
    puts(getAdress());
 
    printf("\nThe Opening Hour of store is:%f",getOpen());
    printf("\nThe Closing Hour of store is:%f",getClose());
}
void main()
{   
    int temp;
    printf("WELCOME to STORE MANAGMENT!!\n\nPlease choose your ACTION:\n1.Create New Store\n2.Print Store\n3.Exit\n");
    scanf("%d",&temp);
    if(temp=1)
    {
        Store a;
        a.printAll();
        //a.setAll(char *name, char *owner, char *adress, float open,float close);
    }
 
}
Как только запускаю и выбираю 1 (temp=1) т.е распечатать обьект 'a' -вин пишет что пришлось закрыть программу...Где я ошибся?
Спасибо!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.08.2010, 12:56     Ввод и вывод данных класса
Посмотрите здесь:

Ввод-вывод данных C++
C++ ввод/вывод данных C++
C++ Ввод и вывод строки собственного класса
ввод/вывод класса и файл. C++
C++ ввод и вывод данных в файл
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
31.08.2010, 12:59     Ввод и вывод данных класса #2
dima6920, А может быть сначала стоит заполнить поля класса а потом выводить? оО

А это что? Вы можете объяснить что тут делаете? Насколько я понял вы вводите новые переменные. Присваиваете их полю класса (как кстати делать нельзя ибо у char следует использовать strcpy или strncpy), а затем собственно вводите значение переменной... Вы не пробовали сделать наоборот что-ли...

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
void Store::setAll(char *name,char *owner,char *adress,float open,float close)
{
        printf("Enter a name for a store:");
        this->name=name;
        gets(name);
 
        printf("Enter a name for a owner:");
        this->owner=owner;
        gets(owner);
 
        printf("Enter a Adress for a store:");
        this->adress=adress;
        gets(adress);
 
        printf("Enter a Openning Hour for a store:");
        this->open=open;
        scanf("%f",&open);
 
        printf("Enter a Closing Hour for a store:");
        this->close=close;
        scanf("%f",&close);
}
dima6920
0 / 0 / 0
Регистрация: 03.08.2010
Сообщений: 23
31.08.2010, 13:00  [ТС]     Ввод и вывод данных класса #3
Я извиняюсь,а разве когда я создаю класс у меня нет там каких либо данных?
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
31.08.2010, 13:03     Ввод и вывод данных класса #4
dima6920, Нет. Если у вас нет конструктора с параметрами, который эти данные вводит.
Кстати. Геттеры стоит делать константными методами. Скиньте полный класс с хидером - перепишу, пока время есть
dima6920
0 / 0 / 0
Регистрация: 03.08.2010
Сообщений: 23
31.08.2010, 13:05  [ТС]     Ввод и вывод данных класса #5
Store.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class Store  
{
private:
    char *name;
    char *owner;
    char *adress;
    float open;
    float close;
 
public:
    Store();
    virtual ~Store();
    void setAll(char *name,char *owner,char *adress,float open,float close);
    char *getName();
    char *getOwner();
    char *getAdress();
    float getOpen();
    float getClose();
    void printAll();
 
 
};
Store.cpp
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
#include <stdio.h>
#include <iostream.h>
#include <String.h>
#include "Store.h"
 
 
Store::Store()
{
 
}
 
Store::~Store()
{
 
}
void Store::setAll(char *name,char *owner,char *adress,float open,float close)
{
    printf("Enter a name for a store:");
    this->name=name;
    gets(name);
 
    printf("Enter a name for a owner:");
    this->owner=owner;
    gets(owner);
 
    printf("Enter a Adress for a store:");
    this->adress=adress;
    gets(adress);
 
    printf("Enter a Openning Hour for a store:");
    this->open=open;
    scanf("%f",&open);
 
    printf("Enter a Closing Hour for a store:");
    this->close=close;
    scanf("%f",&close);
}
char *Store::getName()
{
    return name;
}
char *Store::getOwner()
{
    return owner;
}
char *Store::getAdress()
{
    return adress;
}
float Store::getOpen()
{
    return open;
}
float Store::getClose()
{
    return close;
}
 
void Store::printAll()
{
    printf("The Name of store is:");
    puts(getName());
 
    printf("\nThe Owner of store is:");
    puts(getOwner());
 
    printf("\nThe Adress of store is:");
    puts(getAdress());
 
    printf("\nThe Opening Hour of store is:%f",getOpen());
    printf("\nThe Closing Hour of store is:%f",getClose());
}
void main()
{   
    int temp;
    printf("WELCOME to STORE MANAGMENT!!\n\nPlease choose your ACTION:\n1.Create New Store\n2.Print Store\n3.Exit\n");
    scanf("%d",&temp);
    if(temp=1)
    {
        Store a;
        a.printAll();
        //a.setAll(char *name, char *owner, char *adress, float open,float close);
    }
 
}
Nameless One
Эксперт С++
 Аватар для Nameless One
5753 / 3402 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
31.08.2010, 13:15     Ввод и вывод данных класса #6
dima6920, для инициализации полей класса существуют конструкторы. Для зачистки, соответственно, - деструкторы.
И еще, то, что методы класса запрашивают данные у пользователя - не очень хорошо. Лучше прочитать данные из консоли, а потом уже передать их методу.
dima6920
0 / 0 / 0
Регистрация: 03.08.2010
Сообщений: 23
31.08.2010, 13:19  [ТС]     Ввод и вывод данных класса #7
Да, да спасибо я неверно думал что если у меня есть "пустой" конструктор то он мне закатает какие либо данные как только я сотворю объект.
Nameless One
Эксперт С++
 Аватар для Nameless One
5753 / 3402 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
31.08.2010, 13:22     Ввод и вывод данных класса #8
Цитата Сообщение от dima6920 Посмотреть сообщение
Да, да спасибо я неверно думал что если у меня есть "пустой" конструктор то он мне закатает какие либо данные как только я сотворю объект.
Если работаешь с указателями (строковые массивы в твоем классе), лучше не оставлять их инициализацию на совести компилятора.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
31.08.2010, 13:26     Ввод и вывод данных класса #9
Прошу. На большее времени не было. Работает:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#ifndef _CLASS_H_
#define _CLASS_H_
 
class Store  
{
private:
        char *name;
        char *owner;
        char *adress;
        float open;
        float close;
public:
        Store();
        virtual ~Store();
        void setAll(char *name,char *owner,char *adress,float open,float close);
        char *getName() const;
        char *getOwner() const;
        char *getAdress() const;
        float getOpen() const;
        float getClose() const;
        void printAll();
};
#endif
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
#include <iostream>
#include <cstring>
#include "Class.h"
 
 
Store::Store()
{
 
}
 
Store::~Store()
{
 
}
 
void Store::setAll(char *name,char *owner,char *adress,float open,float close)
{
        this->name=new char[strlen(name)+1];
        strcpy(this->name, name);
        this->owner=new char[strlen(owner)+1];
        strcpy(this->owner, owner);
        this->adress=new char[strlen(adress)+1];
        strcpy(this->adress, adress);     
        this->open=open;
        this->close=close;
}
 
char *Store::getName() const
{
        return name;
}
 
char *Store::getOwner() const
{
        return owner;
}
 
char *Store::getAdress() const
{
        return adress;
}
 
float Store::getOpen() const
{
        return open;
}
 
float Store::getClose() const
{
        return close;
}
 
void Store::printAll()
{
        std::cout<<"The name of store is: ";
        std::cout<<getName()<<'\n';
 
        std::cout<<"The owner of store is: ";
        std::cout<<getOwner()<<'\n';
 
        std::cout<<"The adress of store is: ";
        std::cout<<getAdress()<<'\n';
 
        std::cout<<"The Opening Hour of store is: "<< getOpen() <<'\n';
        std::cout<<"The Closing Hour of store is: "<< getClose() <<'\n';
}
 
int main()
{       
        int temp;
        Store a;
        do
        {
        std::cout<<"WELCOME to STORE MANAGMENT!!\n\nPlease choose your ACTION:\n1.Create New Store\n2.Print Store\n3.Exit\n";
        std::cin>>temp;
        switch(temp)
        {
        case 1:
           {
              char name[30], owner[30], adress[50];
              float open, close;
              std::cout<<"Enter name of the store: ";
              std::cin.get();
              std::cin.getline(name, 30);
              std::cout<<"Enter owner of the store: ";
              std::cin.getline(owner, 30);
              std::cout<<"Enter adress of the store: ";
              std::cin.getline(adress, 50);
              std::cout<<"Enter opening hour for the store: ";
              std::cin>>open;
              std::cout<<"Enter closing hour for the store: ";
              std::cin>>close;
              a.setAll(name, owner, adress, open, close);
            }
           break;
        case 2:
           {
              a.printAll();
           }
           break;
        case 3:
           return 0;
           break;
        default:
           std::cout<<"There is no such option\n";
        }
        }
        while(temp!=3);
        return 0;
}
dima6920
0 / 0 / 0
Регистрация: 03.08.2010
Сообщений: 23
31.08.2010, 13:30  [ТС]     Ввод и вывод данных класса #10
Большое спасибо!Незнаю даже как вас и благодарить,пойду разбирать
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
31.08.2010, 14:11     Ввод и вывод данных класса #11
dima6920, Не идеал конечно. Но думаю доведете до ума.
Andrew_Lvov
Эксперт C++
 Аватар для Andrew_Lvov
259 / 189 / 5
Регистрация: 19.08.2010
Сообщений: 758
Записей в блоге: 1
31.08.2010, 15:01     Ввод и вывод данных класса #12
if(temp=1)
->
if(temp==1)

Добавлено через 1 минуту
В конструкторе неинициализированны члены класса ( в первую очередь строки char* ).
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
31.08.2010, 16:26     Ввод и вывод данных класса #13
Andrew_Lvov, Дык тут уже разобрались. А про конструктор... В нем инициализация не так уж обязетельна
fasked
Эксперт C++
 Аватар для fasked
4924 / 2504 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
31.08.2010, 16:39     Ввод и вывод данных класса #14
Цитата Сообщение от Lavroff Посмотреть сообщение
А про конструктор... В нем инициализация не так уж обязетельна
Разводить инициализацию на несколько мест не очень хорошо. Разве что инициализация объекта данных класса это дорогостоящая процедура и за все время жизни объекта-класса может и не пригодиться вовсе. В любом случае такой подход приносит кучу неудобств. Например, в каждом методе придется вставлять дополнительный оператор контроля:
C++
1
2
if(ch_str == NULL)
    Make(ch_str);
Все это лишние операции, можно про этот момент вообще забыть. Так что инициализировать объекты надо в одном месте. Кроме одного исключительного случая, который надо еще доказать
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
31.08.2010, 16:49     Ввод и вывод данных класса #15
fasked, Ну дык. SetAll чем не инициализация?
Можно вроде и констр сделать по умолчанию... Что-то типа того, правда не уверен что заработает.
C++
1
Store():name(""), owner(""), adress(""), open(0), close(0){}
Andrew_Lvov
Эксперт C++
 Аватар для Andrew_Lvov
259 / 189 / 5
Регистрация: 19.08.2010
Сообщений: 758
Записей в блоге: 1
31.08.2010, 16:53     Ввод и вывод данных класса #16
Lavroff, а, пардон, не увидел.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.08.2010, 22:19     Ввод и вывод данных класса
Еще ссылки по теме:

C++ ввод-вывод данных
Ввод и вывод данных в файл C++
C++ Ввод/вывод, метод класса

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

Или воспользуйтесь поиском по форуму:
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2293 / 1663 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
31.08.2010, 22:19     Ввод и вывод данных класса #17
Цитата Сообщение от Lavroff Посмотреть сообщение
C++
1
2
3
char *getName() const;
char *getOwner() const;
char *getAdress() const;
Lavroff, данные методы не гарантируют константности объекта, хотя помечены как константные. Дело в том что никто не мешает писать в возвращаемый данными методами указатель все что угодно, или попросту удалить.
Будет лучше если эти методы будут возвращать указатель на константную строку:
C++
1
2
3
const char *getName() const;
const char *getOwner() const;
const char *getAdress() const;
Yandex
Объявления
31.08.2010, 22:19     Ввод и вывод данных класса
Ответ Создать тему
Опции темы

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