Написал элементарную программу на тему наследования: есть родительский класс, у которого есть 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
| #include <iostream>
#include <cstdlib>
using namespace std;
///базовый класс///
class publication
{
private:
static const int lim=80;
char name[lim];
float cost;
public:
void set();
void get();
};
void publication::set()
{
cout<<"nazvanie: ";
cin.get(name, lim);
cout<<"stoimost: ";
cin>>cost;
}
void publication::get()
{
cout<<"nazvanie: "<<name<<endl;
cout<<"stoimost: "<<cost<<endl;
}
///наследник 1///
class book:private publication
{
private:
int str;
public:
book(){cin.sync();}
void get()
{
publication::get(); // вызов метода базового класса
cout<<"stranic: "<<str<<endl;
}
void set()
{
publication::set(); // вызов метода базового класса
cout<<"stranic: ";
cin>>str;
}
};
///наследник 2///
class audio:private publication
{
private:
float time;
public:
audio(){cin.sync();}
void get()
{
publication::get(); // вызов метода базового класса
cout<<"vremya (minut): "<<time;
}
void set()
{
publication::set(); // вызов метода базового класса
cout<<"vremya (minut): ";
cin>>time;
}
};
int main()
{
book a;
a.set();
a.get();
audio b;
b.set();
b.get();
system("pause");
return 0;
} |
|
Но когда изменяю эту программу так чтобы наследники имели 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
| #include <iostream>
#include <cstdlib>
using namespace std;
///базовый класс 1///
class publication
{
private:
static const int lim=80;
char name[lim];
float cost;
public:
void set();
void get();
};
void publication::set()
{
cout<<"nazvanie: ";
cin.get(name, lim);
cout<<"stoimost: ";
cin>>cost;
}
void publication::get()
{
cout<<"nazvanie: "<<name<<endl;
cout<<"stoimost: "<<cost<<endl;
}
///базовый класс 2///
class sales
{
private:
double arr[2];
public:
void set()
{
cout<<"vvedite obem prodash za 1 mesyac: ";
cin>>arr[0];
cout<<"za 2 mesyac: ";
cin>>arr[1];
cout<<"za 3 mesyac: ";
cin>>arr[2];
}
void get()
{
cout<<"1: "<<arr[0]<<endl
<<"2: "<<arr[1]<<endl
<<"3: "<<arr[2]<<endl;
}
};
///наследник 1///
class book:private publication, private sales
{
private:
int str;
public:
book(){cin.sync();}
void get()
{
publication::get(); // вызов метода базового класса 1
cout<<"stranic: "<<str<<endl;
sales::get(); // вызов метода базового класса 2
}
void set()
{
publication::set(); // вызов метода базового класса 1
cout<<"stranic: ";
cin>>str;
sales::set(); // вызов метода базового класса 2
}
};
///наследник 2///
class audio:private publication, private sales
{
private:
float time;
public:
audio(){cin.sync();}
void get()
{
publication::get(); // вызов метода базового класса 1
cout<<"vremya (minut): "<<time;
sales::get(); // вызов метода базового класса 2
}
void set()
{
publication::set(); // вызов метода базового класса 1
cout<<"vremya (minut): ";
cin>>time;
sales::set(); // вызов метода базового класса 2
}
};
int main()
{
book a;
a.set();
a.get();
audio b;
b.set();
b.get();
system("pause");
return 0;
} |
|
Программа должна дублировать то что введено пользователем