1 / 1 / 1
Регистрация: 29.05.2015
Сообщений: 44
1

Создать новое свойство (на основе имеющихся) для потомка, используя дружественные функции

13.06.2017, 17:25. Показов 496. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте, подскажите пожалуйста!Нужно создать новое свойство на основе имеющихся для потомка, используя дружественные функции, я создал: если во вставке - "да", то выводится столбец в котором скидка - 10, но у меня выводится видимо адрес, помогите найти ошибку.
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
#include <iostream> 
using namespace std; 
#include <string.h>
# include <conio.h> 
class Uvelir
{protected:char metall[10]; int articul; float ves;
public: Uvelir (int,char*,float); 
void out();}; 
 
Uvelir::Uvelir(int naz,char*m, float v){
articul=naz;strcpy(metall,m);ves=v;}
 
void Uvelir::out(){cout.setf(ios::fixed);
cout.width(10);cout<<articul;
cout.width(10);cout<<metall;
cout.width(10);cout<<ves;}
 
class kolco: public Uvelir{ 
private: int razmer; char vstavka[10];
  public: kolco(int,char*,float,int,char*);
        void out(); int sale[];
friend void sovet(kolco*[],int[],int);};
 
kolco::kolco(int naz,char*m, float v, int r, char*vs):Uvelir(naz,m,v) 
{razmer=r;strcpy(vstavka,vs);}
 
void sovet(kolco* ml[],int sale[],int n)
{for(int i=0;i<3;i++)
{if (strcmp(ml[i]->vstavka,"da")==0)
ml[i]->sale,10;}}
 
void kolco::out()
{Uvelir::out(); 
cout.width(10);cout<<razmer;
cout.width(10);cout<<vstavka;
cout.width(10);cout<<sale;cout<<"\n";}
 
class cepohka: public Uvelir
{ private: char pletenie[10]; int dlina;
  public: cepohka(int,char*,float,char*,int);
        void out(); };
        
cepohka::cepohka(int naz,char*m, float v, char*pl, int d):Uvelir(naz,m,v) 
{strcpy(pletenie,pl);dlina=d;}
 
void cepohka::out()
{Uvelir::out(); 
cout.width(10);cout<<pletenie;
cout.width(10);cout<<dlina;cout<<"\n";}
 
 
 
int main()
{int kol=3; int naz;char m[10], pl[10], vs[10]; float v; int r, d,sale[3];
kolco* Uvelir0 [3];
cout<<"kolca";cout<<"\n";
for (int i=0; i < 3; i++ ) 
{cout<<"vvedite articul=";cin>>naz;
cout<<"vvedite metall=";cin>>m;
cout<<"vvedite ves=";cin>>v;
cout<<"vvedite razmer=";cin>>r;
cout<<"vstavka=";cin>>vs;
Uvelir0[i]=new kolco (naz,m,  v,  r, vs);}
 
cepohka* Uvelir1 [3];
cout<<"cepohki";cout<<"\n";
for(int i=0;i<3;i++)
{cout<<"vvedite articul=";cin>>naz;
cout<<"vvedite metall=";cin>>m;
cout<<"vvedite ves=";cin>>v;
cout<<"vvedite pletenie=";cin>>pl;
cout<<"dlina="; cin>>d;
Uvelir1[i]= new cepohka(naz,m,  v,pl, d);}cout<<"\n";
 
 
sovet(Uvelir0,sale, 3);
 
cout<<"kolca";cout<<"\n";
cout.width(10);cout<<"articul ";
cout.width(10);cout<<"metall ";
cout.width(10);cout<<"ves ";
cout.width(10);cout<<"razmer ";
cout.width(10);cout<<"vstavka ";
cout.width(10);cout<<"vah sale(%)";cout<<"\n";
for(int i=0;i<3;i++)
{Uvelir0[i]->out();}
cout<<"cepohki";cout<<"\n";
cout.width(10);cout<<"articul ";
cout.width(10);cout<<"metall ";
cout.width(10);cout<<"ves ";
cout.width(10);cout<<"pletenie ";
cout.width(10);cout<<"dlina ";cout<<"\n";
for (int i=0; i < 3; i++ ) 
{Uvelir1[i]->out();}
 
while (!(kbhit())); 
return 1; }
Миниатюры
Создать новое свойство (на основе имеющихся) для потомка, используя дружественные функции  
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.06.2017, 17:25
Ответы с готовыми решениями:

Создать дружественные функции для вычисления по формуле
Пользовательский класс должен содержать необходимые закрыты элементы Данные и метод для...

Как добавить компоненту новое свойство используя класс-перехватчик?
Всем здравствуйте. Ознакомился с содержимым статьи...

Создать новое приложение для вычисления таблицы значений функции
Здравствуйте. Помогите,пожалуйста. Создать новое приложение для вычисления таблицы значений...

excel. создать таблицу значение кусочно-непрерывной функции y на интервале [xmin; xmax] с шагом h, для расчета функции y используя логические функции

3
Форумчанин
Эксперт CЭксперт С++
8215 / 5045 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
13.06.2017, 17:38 2
А теперь взгляните на свой код с нормальным форматированием. Какой проще читать?
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
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
#include <iostream> 
#include <string.h>
#include <conio.h>
 
using namespace std;
 
class Uvelir
{
protected:
    char metall[10];
    int articul;
    float ves;
public:
    Uvelir(int, char*, float);
    void out();
};
 
Uvelir::Uvelir(int naz, char*m, float v) {
    articul = naz;
    strcpy(metall, m);
    ves = v;
}
 
void Uvelir::out() {
    cout.setf(ios::fixed);
    cout.width(10);
    cout << articul;
    cout.width(10);
    cout << metall;
    cout.width(10);
    cout << ves;
}
 
class kolco : public Uvelir {
private:
    int razmer;
    char vstavka[10];
public:
    kolco(int, char*, float, int, char*);
    void out();
    int sale[];
    friend void sovet(kolco*[], int[], int);
};
 
kolco::kolco(int naz, char*m, float v, int r, char*vs) :Uvelir(naz, m, v)
{
    razmer = r;
    strcpy(vstavka, vs);
}
 
void sovet(kolco* ml[], int sale[], int n)
{
    for (int i = 0; i < 3; i++)
    {
        if (strcmp(ml[i]->vstavka, "da") == 0)
            ml[i]->sale, 10;
    }
}
 
void kolco::out()
{
    Uvelir::out();
    cout.width(10);
    cout << razmer;
    cout.width(10);
    cout << vstavka;
    cout.width(10);
    cout << sale;
    cout << "\n";
}
 
class cepohka : public Uvelir
{
private:
    char pletenie[10];
    int dlina;
public:
    cepohka(int, char*, float, char*, int);
    void out();
};
 
cepohka::cepohka(int naz, char*m, float v, char*pl, int d) :Uvelir(naz, m, v)
{
    strcpy(pletenie, pl);
    dlina = d;
}
 
void cepohka::out()
{
    Uvelir::out();
    cout.width(10);
    cout << pletenie;
    cout.width(10);
    cout << dlina;
    cout << "\n";
}
 
int main()
{
    int kol = 3;
    int naz;
    char m[10], pl[10], vs[10];
    float v;
    int r, d, sale[3];
    kolco* Uvelir0[3];
    cout << "kolca";
    cout << "\n";
    for (int i = 0; i < 3; i++)
    {
        cout << "vvedite articul=";
        cin >> naz;
        cout << "vvedite metall=";
        cin >> m;
        cout << "vvedite ves=";
        cin >> v;
        cout << "vvedite razmer=";
        cin >> r;
        cout << "vstavka=";
        cin >> vs;
        Uvelir0[i] = new kolco(naz, m, v, r, vs);
    }
 
    cepohka* Uvelir1[3];
    cout << "cepohki";
    cout << "\n";
    for (int i = 0; i < 3; i++)
    {
        cout << "vvedite articul=";
        cin >> naz;
        cout << "vvedite metall=";
        cin >> m;
        cout << "vvedite ves=";
        cin >> v;
        cout << "vvedite pletenie=";
        cin >> pl;
        cout << "dlina=";
        cin >> d;
        Uvelir1[i] = new cepohka(naz, m, v, pl, d);
    }
    cout << "\n";
 
    sovet(Uvelir0, sale, 3);
 
    cout << "kolca";
    cout << "\n";
    cout.width(10);
    cout << "articul ";
    cout.width(10);
    cout << "metall ";
    cout.width(10);
    cout << "ves ";
    cout.width(10);
    cout << "razmer ";
    cout.width(10);
    cout << "vstavka ";
    cout.width(10);
    cout << "vah sale(%)";
    cout << "\n";
    for (int i = 0; i < 3; i++)
    {
        Uvelir0[i]->out();
    }
    cout << "cepohki";
    cout << "\n";
    cout.width(10);
    cout << "articul ";
    cout.width(10);
    cout << "metall ";
    cout.width(10);
    cout << "ves ";
    cout.width(10);
    cout << "pletenie ";
    cout.width(10);
    cout << "dlina ";
    cout << "\n";
    for (int i = 0; i < 3; i++)
    {
        Uvelir1[i]->out();
    }
 
    while (!(kbhit()));
    return 1;
}
Добавлено через 1 минуту
Цитата Сообщение от MrGluck Посмотреть сообщение
int sale[];
В С++ так делать нельзя. Ваш код не скомпилируется.

Добавлено через 41 секунду
Цитата Сообщение от MrGluck Посмотреть сообщение
ml[i]->sale, 10;
Бессмысленная запись с comma operator.
0
1 / 1 / 1
Регистрация: 29.05.2015
Сообщений: 44
13.06.2017, 20:47  [ТС] 3
int sale[] - нельзя так объявлять (в 41 строке)??? Или 51 строку тоже касается?
0
Форумчанин
Эксперт CЭксперт С++
8215 / 5045 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
13.06.2017, 22:22 4
Николайка, в принципе такую конструкцию в С++ нельзя использовать. В любых местах.

Добавлено через 1 час 3 минуты
Только что мне коллега DrOffset указал, что я не до конца прав.
В действительности, значение конструкции вида int arr[] зависит от контекста.
Я имел в виду, что запрещено в С++ использовать Flexible array member. Данная возможность есть в С99, но в С++ её так и не завезли.
Однако, вы можете записать
C++
1
2
3
4
int main()
{
    int arr[] = {1, 2, 3};
}
Тогда размер массива будет выведен исходя из списка инициализации
Или же так:
C++
1
void Foo(int[] arr)
Данная запись эквивалентна int *arr. Здесь мы используем данную конструкцию в контексте описания параметра функции.

Так что не всё так однозначно. Мой ответ касался только первого пункта - использовать Flexible array member в С++ нельзя.

Добавлено через 33 секунды
Благодарю коллегу DrOffset за замечание.
1
13.06.2017, 22:22
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.06.2017, 22:22
Помогаю со студенческими работами здесь

Как создать пользовательское свойство инфоблока на основе привязки к элементам?
Доброго времени суток! Никак не могу разобраться как создать пользовательское свойство инфоблока...

Не выводится свойство потомка
Здрасьте все!!! Хотелось бы узнать кое-что о наследовании. Итак... По моему замыслу class...

Вызов специфических для потомка функций, не зная класса потомка
Доброго времени суток. Когда-то давно делал работу в C#, а сейчас захотел повторить то же в C++....


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

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

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