0 / 0 / 0
Регистрация: 03.08.2010
Сообщений: 23
1

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

31.08.2010, 12:56. Показов 7356. Ответов 16
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Привет уважаемые гуру!
Я к вам с очередным вопросом
Нужно вывести данные класса 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' -вин пишет что пришлось закрыть программу...Где я ошибся?
Спасибо!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
31.08.2010, 12:56
Ответы с готовыми решениями:

Ввод вывод переменной класса, являющейся членом другого класса
Приветствую! У меня есть 2 класса: подкласс filling: class filling { private: int...

ввод/вывод класса и файл.
Добрый день. В условии задачи требуется реализовать перегрузку потоков с той целью, чтобы работать...

Ввод/вывод, метод класса
Добрый день, только начал изучать c++ и сразу много всяких непонятных ошибок, в c# куда проще было...

Реализовать ввод исходных данных, расчет и вывод данных в виде методов класса. В Main только создание объектов и вызов методов
Всем привет) помогите пожалуйста с заданием &quot;Реализовать ввод исходных данных, расчет и вывод...

16
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
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);
}
1
0 / 0 / 0
Регистрация: 03.08.2010
Сообщений: 23
31.08.2010, 13:00  [ТС] 3
Я извиняюсь,а разве когда я создаю класс у меня нет там каких либо данных?
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
31.08.2010, 13:03 4
dima6920, Нет. Если у вас нет конструктора с параметрами, который эти данные вводит.
Кстати. Геттеры стоит делать константными методами. Скиньте полный класс с хидером - перепишу, пока время есть
1
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);
    }
 
}
0
Эксперт С++
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
31.08.2010, 13:15 6
dima6920, для инициализации полей класса существуют конструкторы. Для зачистки, соответственно, - деструкторы.
И еще, то, что методы класса запрашивают данные у пользователя - не очень хорошо. Лучше прочитать данные из консоли, а потом уже передать их методу.
1
0 / 0 / 0
Регистрация: 03.08.2010
Сообщений: 23
31.08.2010, 13:19  [ТС] 7
Да, да спасибо я неверно думал что если у меня есть "пустой" конструктор то он мне закатает какие либо данные как только я сотворю объект.
0
Эксперт С++
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
31.08.2010, 13:22 8
Цитата Сообщение от dima6920 Посмотреть сообщение
Да, да спасибо я неверно думал что если у меня есть "пустой" конструктор то он мне закатает какие либо данные как только я сотворю объект.
Если работаешь с указателями (строковые массивы в твоем классе), лучше не оставлять их инициализацию на совести компилятора.
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
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;
}
1
0 / 0 / 0
Регистрация: 03.08.2010
Сообщений: 23
31.08.2010, 13:30  [ТС] 10
Большое спасибо!Незнаю даже как вас и благодарить,пойду разбирать
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
31.08.2010, 14:11 11
dima6920, Не идеал конечно. Но думаю доведете до ума.
0
Эксперт С++
261 / 191 / 10
Регистрация: 19.08.2010
Сообщений: 760
Записей в блоге: 1
31.08.2010, 15:01 12
if(temp=1)
->
if(temp==1)

Добавлено через 1 минуту
В конструкторе неинициализированны члены класса ( в первую очередь строки char* ).
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
31.08.2010, 16:26 13
Andrew_Lvov, Дык тут уже разобрались. А про конструктор... В нем инициализация не так уж обязетельна
0
Эксперт С++
5043 / 2622 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 1
31.08.2010, 16:39 14
Цитата Сообщение от Lavroff Посмотреть сообщение
А про конструктор... В нем инициализация не так уж обязетельна
Разводить инициализацию на несколько мест не очень хорошо. Разве что инициализация объекта данных класса это дорогостоящая процедура и за все время жизни объекта-класса может и не пригодиться вовсе. В любом случае такой подход приносит кучу неудобств. Например, в каждом методе придется вставлять дополнительный оператор контроля:
C++
1
2
if(ch_str == NULL)
    Make(ch_str);
Все это лишние операции, можно про этот момент вообще забыть. Так что инициализировать объекты надо в одном месте. Кроме одного исключительного случая, который надо еще доказать
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
31.08.2010, 16:49 15
fasked, Ну дык. SetAll чем не инициализация?
Можно вроде и констр сделать по умолчанию... Что-то типа того, правда не уверен что заработает.
C++
1
Store():name(""), owner(""), adress(""), open(0), close(0){}
0
Эксперт С++
261 / 191 / 10
Регистрация: 19.08.2010
Сообщений: 760
Записей в блоге: 1
31.08.2010, 16:53 16
Lavroff, а, пардон, не увидел.
0
Эксперт С++
2347 / 1720 / 148
Регистрация: 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;
1
31.08.2010, 22:19
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
31.08.2010, 22:19
Помогаю со студенческими работами здесь

Ввод структурированных данных в файл и вывод данных из этого файла на экран (сделать хранилище данных в файле)
Здравствуйте) помогите написать программу, осуществляющую ввод структурированных данных в файл и...

Ввод и вывод строки собственного класса
Добрый вечер. Пишу свой класс строк, беда в том, что во вводе что-то, видимо, не так..В общем,...

Ввод класса с полями и вывод на экран
Ввести класс с полями 1) название покупки 2)дата покупки (номер месяца) 3) цена. Заполнить массив...

Ввод класса вывод вида животных
Всем привет у меня вопрос. Помогите напечатать программу в которой при вводе класса(например...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru