Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.53/15: Рейтинг темы: голосов - 15, средняя оценка - 4.53
5 / 5 / 4
Регистрация: 13.05.2014
Сообщений: 130

Заполнение класса

05.11.2014, 21:22. Показов 3205. Ответов 19
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Уважаемые форумчане я понимаю что вопрос плёвый, но есть у меня пробелы со строками! Прошу сильно не критиковать!
Проблема в следующем я хочу заполнить поле
C++
1
char name[20]
в конструкторе но.....
Вот код
HEADER
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
#ifndef MUZ_SHOP_H
#define MUZ_SHOP_H
# include <iostream>
using namespace std;
 
class cArmin
{
    char name[20];
    int amount;
    double cost;
    int rating;
public:
    cArmin();
    char GetName() {return name[20];}
    int GetAmount() {return amount;}
    int GetRating () {return rating;}
    double GetCost () {return cost;}
};
 
class cBach
{
    char name[20];
    int amount;
    double cost;
    int rating;
public:
    cBach();
    char GetName() {return name[20];}
    int GetAmount() {return amount;}
    int GetRating () {return rating;}
    double GetCost () {return cost;}
};
 
class cDDT
{
    char name[20];
    int amount;
    double cost;
    int rating;
public:
    cDDT();
    char GetName() {return name[20];}
    int GetAmount() {return amount;}
    int GetRating () {return rating;}
    double GetCost () {return cost;}
};
 
class cShop
{
    cArmin A;
    cBach B;
    cDDT D;
public:
    friend ostream & operator<<(ostream &,cShop &);
 
};
 
# endif
implementation
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
#include <iostream>
#include <ctime>
#include <iomanip>
#include <conio.h>
#include "MUZ_SHOP.h"
#include <cmath>
#include <Windows.h>
using namespace std;
 
cArmin::cArmin():amount(10),cost(59.99),rating(0)
{
    strcpy (name,"Armin van buuren");
}
cBach::cBach():amount(15),cost(45.50),rating(0)
{
    strcpy (name,"Bach");
}
cDDT::cDDT():amount(8),cost(48.70),rating(0)
{
    strcpy (name,"DDT");
}
 
ostream & operator<<(ostream & os,cShop & all)
{
    setlocale(LC_ALL,"Rus");
    cout << "Давайте посмотрим наш ассортимент!\n\n";
    cout << "Название исполнителя:\t"<<"Цена:\t"<<"Оставшееся кол-во дисков:\n\n";
    os << all.A.GetName()<<'\t'<<all.A.GetCost()<<'\t'<<all.A.GetAmount()<<endl;
    os << all.B.GetName()<<'\t'<<all.B.GetCost()<<'\t'<<all.B.GetAmount()<<endl;
    os << all.D.GetName()<<'\t'<<all.D.GetCost()<<'\t'<<all.D.GetAmount()<<endl;
    cout << endl;
    return os;
}
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
05.11.2014, 21:22
Ответы с готовыми решениями:

Заполнение вектора класса внутри самого класса
class A { private: int a; public: A() { a = 0; }; A get(vector &lt;A&gt;* vec)

Заполнение класса в цикле
цикл: int _tmain(int argc, _TCHAR* argv) { int d,m,y; ZapBook* z=new ZapBook; int length=0; char flag='y'; ...

Заполнение map объектами класса
Здравствуйте! Нашел пример заполнения map таким образом: map&lt;string, int&gt; M; M = 1; Но при заполнении map аналогичным образом...

19
Заблокирован
05.11.2014, 21:26
Цитата Сообщение от Sapendo Посмотреть сообщение
я хочу заполнить поле
char name[20]
в конструкторе но.....
но что?
0
5 / 5 / 4
Регистрация: 13.05.2014
Сообщений: 130
05.11.2014, 21:32  [ТС]
Я рад что я Вам поднял настроение! А по человечески объяснить??? Я знаю что я не правильно делаю, поэтому прошу помощи!
0
Заблокирован
05.11.2014, 21:34
Цитата Сообщение от Sapendo Посмотреть сообщение
Я рад что я Вам поднял настроение! А по человечески объяснить??? Я знаю что я не правильно делаю, поэтому прошу помощи!
Ты с какой планеты? Это аналогично тому, что я зайду в магазин и скажу продавщице, дайте мне пожалуйста вот ту ....... Поймёт он, что мне дать?
В чём проблема - то? Что конкретно не получается? Какие ошибки?
0
5 / 5 / 4
Регистрация: 13.05.2014
Сообщений: 130
05.11.2014, 21:45  [ТС]
В конструкторе заполняю поля
C++
1
2
3
4
cArmin::cArmin():amount(10),cost(59.99),rating(0)
{
    strcpy (name,"Armin van buuren");
}
но потом при вызове в main пишет иероглифы!

Добавлено через 2 минуты
Вот main
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
#include <iostream>
#include <ctime>
#include <iomanip>
#include <conio.h>
#include "MUZ_SHOP.h"
#include <cmath>
#include <Windows.h>
 
using namespace std;
 
int main()
{
    setlocale(LC_ALL,"Rus");
    bool flag = true;
    cShop shop;
    char choice;
    do
    {
        cout<<"\n1: Посмотреть ассортимент!\n";
        cout<<"2: Купить!\n";
        cout<<"3: Найти искомое)\n";
        cout<<"4: Выход\n";
        cout<<"\nВыберете нужную Вам позицию: ";
        choice = _getch();
    system("cls");
    if (choice == 49)
    {
        cout << shop;
    }
    
 
    return 0;
 
 
 
}
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12928 / 6796 / 1819
Регистрация: 18.10.2014
Сообщений: 17,196
05.11.2014, 21:48
Лучший ответ Сообщение было отмечено Sapendo как решение

Решение

Так а что это такое

C++
1
char GetName() {return name[20];}
?

Эта функция возвращает 20-й символ имени, а не само имя. При этом в имени символы есть только от 0 до 19. Неудивительно, что возвращается какой-то иероглиф из чужой памяти, т.е мусор.

Если вы хотели вернуть имя, то

C++
1
char *GetName() { return name; }
а лучше

C++
1
const char *GetName() const { return name; }
а еще лучше перейти на 'std::string'.
1
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
05.11.2014, 21:48
C++
1
const char* GetName() {return name;}
1
5 / 5 / 4
Регистрация: 13.05.2014
Сообщений: 130
05.11.2014, 21:53  [ТС]
TheCalligrapher,
Спасибо огромное за пояснения!
0
 Аватар для IrineK
2023 / 1641 / 425
Регистрация: 23.02.2011
Сообщений: 6,002
Записей в блоге: 25
05.11.2014, 21:53
Sapendo,
Зачем делать три класса там, где делается один - назовем его cCD?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
class cCD
{
    char *name;
    int amount;
    double cost;
    int rating;
public:
    cCD();
    char *GetName() {return name;}
    int GetAmount() {return amount;}
    int GetRating () {return rating;}
    double GetCost () {return cost;}
};
0
5 / 5 / 4
Регистрация: 13.05.2014
Сообщений: 130
05.11.2014, 21:57  [ТС]
IrineK,
Знаю))) Такое задание было!
0
 Аватар для IrineK
2023 / 1641 / 425
Регистрация: 23.02.2011
Сообщений: 6,002
Записей в блоге: 25
05.11.2014, 22:03
Имело бы смысл сделать абстрактный класс cCD.
И от него уже наследовать всевозможные вариации.
0
5 / 5 / 4
Регистрация: 13.05.2014
Сообщений: 130
05.11.2014, 22:15  [ТС]
IrineK, наследование мы еще не проходили
0
16 / 16 / 6
Регистрация: 03.11.2014
Сообщений: 72
05.11.2014, 22:47
Цитата Сообщение от Sapendo Посмотреть сообщение
cArmin::cArmin():amount(10),cost(59.99), rating(0)
{
* * strcpy (name,"Armin van buuren");
}
а за подобные конструкторы преподаватель по попе не надает?
пользователь должен вводить всё это дело.
0
5 / 5 / 4
Регистрация: 13.05.2014
Сообщений: 130
05.11.2014, 23:03  [ТС]
Cookie Monster, это уже дано и поэтому пользователь не должен вводить!
0
05.11.2014, 23:10

Не по теме:

Цитата Сообщение от Sapendo Посмотреть сообщение
Такое задание было!
Цитата Сообщение от Sapendo Посмотреть сообщение
это уже дано
Задача учебная.
Далека от жизни как альфа Центавра от местного коровника.
Ну, и ладно.

0
5 / 5 / 4
Регистрация: 13.05.2014
Сообщений: 130
05.11.2014, 23:23  [ТС]
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
#ifndef MUZ_SHOP_H
#define MUZ_SHOP_H
# include <iostream>
using namespace std;
 
class cArmin
{
    char name[20];
    int amount;
    double cost;
    int rating;
public:
    cArmin();
    const char *GetName() const {return name;}
    int GetAmount() {return amount;}
    int GetRating () {return rating;}
    double GetCost () {return cost;}
    //void SetRating (int t) {rating = t;} 
    cArmin operator++ ();
};
 
class cBach
{
    char name[20];
    int amount;
    double cost;
    int rating;
public:
    cBach();
    const char *GetName() const {return name;}
    int GetAmount() {return amount;}
    int GetRating () {return rating;}
    double GetCost () {return cost;}
};
 
class cDDT
{
    char name[20];
    int amount;
    double cost;
    int rating;
public:
    cDDT();
    const char *GetName() const {return name;}
    int GetAmount() {return amount;}
    int GetRating () {return rating;}
    double GetCost () {return cost;}
};
 
class cShop
{
    cArmin A;
    cBach B;
    cDDT D;
public:
    friend ostream & operator<<(ostream &,cShop &);
 
};
 
# 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
#include <iostream>
#include <ctime>
#include <iomanip>
#include <conio.h>
#include "MUZ_SHOP.h"
#include <cmath>
#include <Windows.h>
using namespace std;
 
cArmin::cArmin():amount(10),cost(59.99),rating(0)
{
    strcpy (name,"Armin van buuren");
}
cBach::cBach():amount(15),cost(45.50),rating(0)
{
    strcpy (name,"Bach");
}
cDDT::cDDT():amount(8),cost(48.70),rating(0)
{
    strcpy (name,"DDT");
}
 
ostream & operator<<(ostream & os,cShop & all)
{
    setlocale(LC_ALL,"Rus");
    cout << "Давайте посмотрим наш ассортимент!\n\n";
    cout << "Название исполнителя:\t"<<"Цена:\t"<<"Кол-во дисков:"<<'\t'<<"Рейтинг:\n\n";
    os << all.A.GetName()<<setw(13)<<all.A.GetCost()<<setw(10)<<all.A.GetAmount()<<setw(10)<<all.A.GetRating()<<endl;
    os << all.B.GetName()<<setw(25)<<fixed<<setprecision(2)<<all.B.GetCost()<<setw(10)<<all.B.GetAmount()<<setw(10)<<all.B.GetRating()<<endl;
    os << all.D.GetName()<<setw(26)<<fixed<<setprecision(2)<<all.D.GetCost()<<setw(9)<<all.D.GetAmount()<<setw(11)<<all.D.GetRating()<<endl;
    cout << endl;
    return os;
}
 
cArmin cArmin::operator++()
{
    ++rating;
    --amount;
}
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
#include <iostream>
#include <ctime>
#include <iomanip>
#include <conio.h>
#include "MUZ_SHOP.h"
#include <cmath>
#include <Windows.h>
 
using namespace std;
 
int main()
{
    setlocale(LC_ALL,"Rus");
    bool flag = true;
    cShop shop;
    cArmin A;
    cBach B;
    cDDT D;
    char choice;
    while (1)
    {
    do
    {
        cout<<"\n1: Посмотреть ассортимент!\n";
        cout<<"2: Купить!\n";
        cout<<"3: Найти искомое)\n";
        cout<<"4: Выход\n";
        cout<<"\nВыберете нужную Вам позицию: ";
        choice = _getch();
    system("cls");
    if (choice == 49)
    {
        cout << shop;
    }
    if (choice == 50)
    {
        do
        {
            cout<<"\n1: Armin van buuren!\n";
            cout<<"2: Bach!\n";
            cout<<"3: DDT!\n";
            cout<<"4: Выход\n";
            cout<<"\nВыберете нужную Вам позицию: ";
            choice = _getch();
            if (choice == 49)
        {
            ++А;
        }
        if (choice == 50)
        {
            //shop+B;
        }
        if (choice == 51)
        {
            //shop+D;
        }
        if (choice == 52)
        {
            flag = false;
            break;
        }
        } while(!strchr ("1234", choice));
    }
    if (choice == 51)
    {
 
    }
    if (choice == 52&&flag == true)
    {
        exit(0);
    }
        } while(!strchr ("1234", choice));
    }
 
    return 0;
 
 
//  int n;
// 
//n = _getch();
//cout << n;
}
Могли бы Вы помочь еще раз! При покупке диска (например первого) рейтинг его должен увеличиться а кол-во уменьшиться! Я делаю через перегрузку оператора ++А, но при повторном выводе на экран информации все без изменений! Через отладчик смотрел, там все срабатывает! Заранее спасибо!
0
16 / 16 / 6
Регистрация: 03.11.2014
Сообщений: 72
05.11.2014, 23:37
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class cCD
{
    char m_name[20];
    int m_amount;
    double m_cost;
    int m_rating;
public:
    cCD();
    cCD(char*, int, double, int);
    char* GetName() {return m_name;}
    int GetAmount() {return m_amount;}
    int GetRating () {return m_rating;}
    double GetCost () {return m_cost;}
};
C++
1
2
3
4
5
6
7
cCD::cCD()
{
}
cCD::cCD(char* name, int amount, double cost, int rating):m_amount(amount),m_cost(cost),m_rating(rating)
{
    strcpy (m_name,name);
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
class cShop
{
    cCD Armin;
    cCD Bach;
    cCD DDT;
public:
    cShop():Armin(...,...,...,...),Bach(...,...,...,...),DDT(...,...,...,...)
{
}
    friend ostream & operator<<(ostream &,cShop &);
 
};
и без наследования обошелся.
0
5 / 5 / 4
Регистрация: 13.05.2014
Сообщений: 130
06.11.2014, 00:25  [ТС]
Так что поможете?
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12928 / 6796 / 1819
Регистрация: 18.10.2014
Сообщений: 17,196
06.11.2014, 00:52
Цитата Сообщение от Sapendo Посмотреть сообщение
Я делаю через перегрузку оператора ++А, но при повторном выводе на экран информации все без изменений!
Так а что вы ожидали?

У вас в программе каждый диск существует в 2-х экземплярах. Один сидит внутри объекта 'shop' в 'main'. Другой объявлен как самостоятельная локальная переменная в 'main'.

'++' вы делает этой самостоятельной локальной переменной. А на экран выводите то, что сидит внутри 'shop'. Внутри 'shop' ничего не менялось. Никто дискам внутри 'shop' никакого '++' не делал. Поэтому и информация выводится без изменений.

Например, 'cArmin' у вас существует и как 'A', и как 'shop.A'. Этот '++' вы делаете для 'A', а на печать посылаете 'shop.A'.
1
5 / 5 / 4
Регистрация: 13.05.2014
Сообщений: 130
06.11.2014, 01:05  [ТС]
TheCalligrapher, Я понял спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
06.11.2014, 01:05
Помогаю со студенческими работами здесь

Заполнение контейнера map объектами класса
Здравствуйте! Помогите разобраться с map. Не получается заполнить контейнер объектами класса. Если можно, напишите простой пример.

Заполнение статического поля класса с клавиатуры
Доброго времени суток, возникла проблема. Я не могу задать статическое поле с клавиатуры. Задача: добавить статическое поле и 2 метода...

Инициализация шаблонного класса(В конструкторе класса после двоеточия вновь имя класса)
Всем доброго времени суток! Пытаюсь разобраться как работает приведенный мной код. Конкретно, пытаюсь разобраться что происходит в...

Заполнение DataGridView из класса
Доброго времени суток, вопрос заключается в следующем, необходимо создать в классе метод с циклом, в котором будут получаться значения...

Заполнение экземпляров класса
Доброго времени суток. Помогите пожалуйста разобраться. Имеется вот что: Описываем класс Студ в котором содержатся имена студентов и...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США. Нашел на реддите интересную статью под названием «Кто-нибудь знает, где получить бесплатный компьютер или. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru