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

Не могу разобраться с наследованием - C++

Восстановить пароль Регистрация
 
tasik
0 / 0 / 0
Регистрация: 27.12.2012
Сообщений: 52
26.03.2014, 21:41     Не могу разобраться с наследованием #1
есть клас

C++ (Qt)
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
class Liquid{
    private:
        string name;
        float density;
    public:
        Liquid(){
            name = "unknow";
            density = 0;
        }
 
        Liquid(string n, float d){
            name = n;
            density = d;
        }
 
        Liquid(const Liquid& l){}
 
 
        void set_name(){
            cout << "Enter name of liquid: ";
            cin >> name;
        }
 
        void set_density(){
            cout << "Enter density of liquid: ";
            cin >> density;
        }
 
 
        string get_name(){
            return name;
        }
 
        float get_density(){
            return density;
        }
 
        void show(){
            cout << name << ' ' << density << endl;
        }
 
};
нужно создать клас Alcohol
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class Alcohol : public Liquid{
    private:
 
        float strength;
    public:
        Alcohol(){
            name = "unknow";
            density = 0;
            strength = 0;
        }
 
        
 
        void set_strength(){
            cout << "Enter strength of liquid: ";
            cin >> strength;
        }
 
        void show(){
            cout << name << ' ' << density << ' ' << strength << endl;
        }
};
не наследуются поля в родительском класе!Как решить проблему!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.03.2014, 21:41     Не могу разобраться с наследованием
Посмотрите здесь:

C++ не могу разобраться
C++ Не могу разобраться в С++
Не могу разобраться с задачей C++
C++ не могу разобраться
Не могу разобраться C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zss
Модератор
Эксперт С++
 Аватар для zss
5949 / 5554 / 1785
Регистрация: 18.12.2011
Сообщений: 14,193
Завершенные тесты: 1
26.03.2014, 21:53     Не могу разобраться с наследованием #2
private поменяйте на protected
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
26.03.2014, 22:02     Не могу разобраться с наследованием #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
53
54
55
56
57
58
59
60
61
62
63
64
65
class Liquid{
    private:
        string name;
        float density;
    public:
        Liquid(){
            name = "unknow";
            density = 0;
        }
 
        Liquid(string n, float d){
            name = n;
            density = d;
        }
 
        Liquid(const Liquid& l){}
 
 
        void set_name(){
            cout << "Enter name of liquid: ";
            cin >> name;
        }
 
        void set_density(){
            cout << "Enter density of liquid: ";
            cin >> density;
        }
 
 
        string& get_name(){
            return name;
        }
 
        float& get_density(){
            return density;
        }
 
        void show(){
            cout << name << ' ' << density << endl;
        }
 
};
 
class Alcohol : public Liquid{
    private:
 
        float strength;
    public:
        Alcohol(){
            get_name() = "unknow";
            get_density() = 0;
            strength = 0;
        }
 
        
 
        void set_strength(){
            cout << "Enter strength of liquid: ";
            cin >> strength;
        }
 
        void show(){
            cout << get_name() << ' ' << get_density() << ' ' << strength << endl;
        }
};
zss
Модератор
Эксперт С++
 Аватар для zss
5949 / 5554 / 1785
Регистрация: 18.12.2011
Сообщений: 14,193
Завершенные тесты: 1
27.03.2014, 08:08     Не могу разобраться с наследованием #4
alsav22,
Цитата Сообщение от alsav22 Посмотреть сообщение
float& get_density(){
Так делать нелогично, поскольку становятся доступными из вне защищенные члены класса.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
27.03.2014, 12:00     Не могу разобраться с наследованием #5
Цитата Сообщение от zss Посмотреть сообщение
Так делать нелогично, поскольку становятся доступными из вне защищенные члены класса.
Согласен, мой косяк (под код ТС старался подстроиться).
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
class Liquid
{
    private:
        string name;
        float density;
    public:
        Liquid() : name(""), density(0)
        {
        }
 
        Liquid(string str, float d) : name(str), density(d)
        {
        }
 
        Liquid(const Liquid& l){}
 
        void set_name(string str)
        {
            name = str;
        }
 
        void set_density(float d)
        {
            density = d;
        }
 
        string get_name() const 
        {
            return name;
        }
 
        float get_density() const
        {
            return density;
        }
 
        void show() const
        {
            cout << name << ' ' << density << endl;
        }
 
};
 
class Alcohol : public Liquid
{
    private:
        float strength;
    public:
        Alcohol() : strength(0)
        {
            
        }
 
        Alcohol(string str, float d, float n) : Liquid(str, d), strength(n)
        {
            
        }
 
        void set_strength(float d)
        {
            strength = d;
        }
 
        float get_strength() const
        {
           return strength;
        }
 
        void show() const
        {
            cout << get_name() << ' ' << get_density() << ' ' << strength << endl;
        }
};
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
27.03.2014, 13:32     Не могу разобраться с наследованием #6
Цитата Сообщение от alsav22 Посмотреть сообщение
Согласен, мой косяк (под код ТС старался подстроиться).
так можно и константную ссылку вернуть же
alsav22
27.03.2014, 13:41     Не могу разобраться с наследованием
  #7

Не по теме:

Цитата Сообщение от Tulosba Посмотреть сообщение
так можно и константную ссылку вернуть же
Можно, но я хотел сохранить логику (или синтаксис?) ТС:
C++
1
2
3
4
5
Alcohol(){
            name = "unknow";
            density = 0;
            strength = 0;
        }
Т.е., заменить name = "unknow", density = 0, похожим действием. Отвлёкся от того, что это классы.

Yandex
Объявления
27.03.2014, 13:41     Не могу разобраться с наследованием
Ответ Создать тему
Опции темы

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