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

Как правильно использовать классы? Как вывести значение класса на экран? - C++

Восстановить пароль Регистрация
 
snzh
1 / 1 / 0
Регистрация: 10.08.2013
Сообщений: 72
20.03.2014, 22:58     Как правильно использовать классы? Как вывести значение класса на экран? #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
28
29
30
31
32
33
34
#include <cstdlib>
#include <iostream>
 
using namespace std;
 
#define AVTORMAS 15
#define NAMEMAS 15
 
class card {
    int ekz;
    char zaglav [NAMEMAS];
    char avtor [AVTORMAS];
public:
    void store(int ekz, char* zaglav, char* avtor);
    char* show();
};
 
void card::store(int ekz, char* zaglav, char* avtor) { }
 
char* card::show() {
    
    return ekz , zaglav, avtor;
}
 
int main()
{
    card s1;
    s1.store(2, "NameTest", "AvtorTest");
    cout << s1.show() << "\n";
    
    cout << "Press the enter key to continue ...";
    cin.get();
    return EXIT_SUCCESS;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.03.2014, 22:58     Как правильно использовать классы? Как вывести значение класса на экран?
Посмотрите здесь:

C++ при перезагрузке оператора для класса не получается использовать имя переменной такое же,как в описании класса
Как вывести на экран переменную из функции, которой присваиваеться значение через указатель? C++
Как правильно использовать friend для доступа к экземпляру класса C++
Чтение и запись в файл. Как вывести значение на экран C++
Как правильно вызвать метод в С++ и как использовать команду goto в default C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
AGS17
7 / 5 / 1
Регистрация: 03.11.2012
Сообщений: 74
21.03.2014, 00:44     Как правильно использовать классы? Как вывести значение класса на экран? #2
Два варианта: нормальный и плохой. Нормальный - это переопределять оператор << для твоего класса, исправлю твой вариант, простой и плохой:
C++
1
2
3
4
void card::show() {
    
    cout << ekz << " " << zaglav << " " << avtor;
}
C++
1
2
3
4
5
6
7
8
9
10
int main()
{
    card s1;
    s1.store(2, "NameTest", "AvtorTest");
    s1.show();
    
    cout << "\nPress the enter key to continue ...";
    cin.get();
    return EXIT_SUCCESS;
}
vlad3996
6 / 6 / 3
Регистрация: 27.10.2013
Сообщений: 14
21.03.2014, 01:19     Как правильно использовать классы? Как вывести значение класса на экран? #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
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
#include <iostream>
 
using namespace std;
 
class card {
    int ekz;
    char *zaglav;
    char *avtor;                //задание строки как char [] очень непрактично в классе... лучше string, ну или char*
public:
    void store(int ekz, char* zaglav, char* avtor);     //неплохо было бы написать конструкторы( с параметрами и без)+деструктор т.к. выделяется дин. память
    //card(); //в конструкторе без параметров можно создать "пустой экземпляр"
    //card (int e, char* zag, char* avt);
    //~card() {delete []zaglav; delete []avtor;
    void show();                                        //обычно пишутся отдельные методы set, get для отдельных полей
    //void setEkz(int e) {ekz=e;}                       //например такие
    //int getEkz() {return ekz;}
    friend ostream & operator <<(ostream &out, card &car);//а перегрузка операторов >>, <<  для ввода, вывода всего сразу
};
/*card::card (int e, char* zag, char* avt) 
{
    ekz=e;
    zaglav=new char[strlen(zag)+1];
    strcpy(zaglav,zag);
    avtor=new char[strlen(avt)+1];
    strcpy(avtor,avt);
}*/
void card::store(int e, char* zag, char* avt) 
{
    ekz=e;
    zaglav=new char[strlen(zag)+1];
    strcpy(zaglav,zag);
    avtor=new char[strlen(avt)+1];
    strcpy(avtor,avt);
}
ostream & operator <<(ostream &out, card &car)
{
    cout<<"ekz ="<<car.ekz<<endl<<"zaglav ="<<car.zaglav<<endl<<"avtor="<<car.avtor<<endl;
    return out;
}
 void card::show() {
   cout<<"ekz ="<<ekz<<endl<<"zaglav ="<<zaglav<<endl<<"avtor="<<avtor<<endl;
}
void main()
{
    card s1;
    s1.store(2, "NameTest", "AvtorTest");
    //card s2(2, "NameTest", "AvtorTest"); 
    cout << s1 << "\n";
    s1.show();
    cout << "Press the enter key to continue ...";
    cin.get();
}
snzh
1 / 1 / 0
Регистрация: 10.08.2013
Сообщений: 72
21.03.2014, 21:55  [ТС]     Как правильно использовать классы? Как вывести значение класса на экран? #4
AGS17, большое спасибо за ответ. компилируется но в окне вместо положеной информации высвечиваются 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
24
25
26
27
28
29
30
31
#include <cstdlib>
#include <iostream>
 
using namespace std;
 
class card {
    int ekz;
    string zaglav;
    string avtor;
public:
    void store(int ekz, string zaglav, string avtor);
    void show();
};
 
void card::store(int ekz, string zaglav, string avtor) { }
 
void card::show() {
    
    cout << ekz << " " << zaglav << " " << avtor << "\n";
}
 
int main()
{
    card s1;
    s1.store(2, "NameTest", "AvtorTest");
    s1.show();
    
    cout << "Press the enter key to continue ...";
    cin.get();
    return EXIT_SUCCESS;
}
Добавлено через 5 минут
vlad3996, привет. Спасибо огромное за помощь. Компилятор выдает ошибки, первая что то о том, что card не может быть перегружен, на деструктор тоже ругается и еще некоторые. Если поможешь разобраться дальше, буду благодарен. Если нет, то и на том большое спасибо.
Среда wxDev-C++.
zss
Модератор
Эксперт С++
 Аватар для zss
5952 / 5557 / 1787
Регистрация: 18.12.2011
Сообщений: 14,201
Завершенные тесты: 1
21.03.2014, 22:15     Как правильно использовать классы? Как вывести значение класса на экран? #5
Переменные, члены класса, надо инициализировать
C++
1
2
3
4
5
6
void card::store(int ekz, string zaglav, string avtor) 
{
   this->ekz=ekz;
   this->zaglav=zaglav;
   this->avtor=avtor;
}
И еще
C++
1
#include <string>
snzh
1 / 1 / 0
Регистрация: 10.08.2013
Сообщений: 72
22.03.2014, 02:15  [ТС]     Как правильно использовать классы? Как вывести значение класса на экран? #6
zss,vlad3996, AGS17, большое всем спасибо! Программа заработала.
vlad3996
6 / 6 / 3
Регистрация: 27.10.2013
Сообщений: 14
22.03.2014, 23:01     Как правильно использовать классы? Как вывести значение класса на экран? #7
snzh, я просто предложил
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
#include <iostream>
using namespace std;
class card 
{
    int ekz;
    char *zaglav;
    char *avtor;   
public:
    card(const char * zaglav="nozaglav",const char * avtor="noavtor");  //эти значения будут по умолчанию, если не укажешь сам
    card (const int e, const char* zag, const char* avt);
    ~card() {delete []zaglav; delete []avtor;}                                      
    friend ostream & operator <<(ostream &out, card &car);
};
card::card(const char * zagl,const char * avt) :ekz(0) // ekz(0) то же самое, что и ekz=0
{
    zaglav=new char [strlen(zagl)+1];
    strcpy(zaglav,zagl);
    avtor=new char [strlen(avt)+1];
    strcpy(avtor,avt);
}
card::card (const int e, const char* zag, const char* avt) 
{
    zaglav=new char[strlen(zag)+1];
    strcpy(zaglav,zag);
    avtor=new char[strlen(avt)+1];
    strcpy(avtor,avt);
    ekz=e;
}
ostream & operator <<(ostream &out, card &car)
{
    cout<<"ekz ="<<car.ekz<<endl<<"zaglav ="<<car.zaglav<<endl<<"avtor="<<car.avtor<<endl;
    return out;
}
void main()
{
    card s1;
    card s2(2, "NameTest", "AvtorTest"); 
    cout<<s1<<endl<<s2<<endl;
    cout << "Press the enter key to continue ...";
    cin.get();
}
snzh
1 / 1 / 0
Регистрация: 10.08.2013
Сообщений: 72
23.03.2014, 01:23  [ТС]     Как правильно использовать классы? Как вывести значение класса на экран? #8
vlad3996,так я без сарказма написал. Большое спасибо за то что помогаешь. Это всегда похвально. Извини, если это выглядело грубо. В общем я ничего плохого не имел ввиду. Какие могут быть тут обиды? На что?)
... хоть кто-то помогает)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.12.2014, 00:00     Как правильно использовать классы? Как вывести значение класса на экран?
Еще ссылки по теме:

C++ как правильно вывести на экран суммы элементов каждой строки матрицы
Как правильно размещать классы C++
C++ Как, создав переменную класса string, вывести ее последнюю букву на экран

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

Или воспользуйтесь поиском по форуму:
mmeexx
0 / 0 / 0
Регистрация: 09.10.2013
Сообщений: 159
06.12.2014, 00:00     Как правильно использовать классы? Как вывести значение класса на экран? #9
В принципе мне в некоторых таких случаях помогает
C++ (Qt)
1
2
cin.get();
cin.get();
,то есть повторение
C++ (Qt)
1
cin.get();
Yandex
Объявления
06.12.2014, 00:00     Как правильно использовать классы? Как вывести значение класса на экран?
Ответ Создать тему
Опции темы

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