Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 29.03.2018
Сообщений: 100
1

Как изменить переменную в классе, находящуюся в private?

13.05.2019, 18:52. Просмотров 612. Ответов 13
Метки нет (Все метки)

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
class Figura
{
private:
    float storona;
    float ploshad;
    
public:
 
};
 
 
 
class Romb : public Figura
{
private:
    int ugol;
 
public:
 
};
 
 
class Kvadrat : public Figura
{
public:
 
};
 
 
 
int main()
{
    Romb r;
    Kvadrat k;
По заданию надо, чтобы все переменные находились в private, как мне их вводить с клавиатуры?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.05.2019, 18:52
Ответы с готовыми решениями:

наследование в классе нескольких функций из другого или как добавить функцию находящуюся в классе в другой класс
есть класс. есть второй класс. как добавить функцию находящуюся в классе в другой класс(второй) при...

Изменить переменную из класса MainActivity в классе MainRenderer
Ребята подскажите пожалуйста, у менять есть два файла: MainActivity.java import...

Через класс B изменить переменную type в классе А
У меня есть класс А. public class A extends B { private int type = 0; public...

Как обьявить переменную в одном классе и что бы ее было видно в дочернем классе
У меня есть основной класс с названием Root один из его членов наследует дочерний класс SubRoot....

13
918 / 859 / 128
Регистрация: 19.02.2010
Сообщений: 2,734
13.05.2019, 18:58 2
Сделайте для каждой переменной set- и get-функции, разместите их в public-разделах деклараций классов.

Можно ещё и параметризованные (т.е. с аргументами) конструкторы сделать (также в public), чтобы при создании экземпляра класса сразу все его переменные-члены инициализировать нужными=передаваемыми значениями. И void-конструкторы, чтобы создавать объекты с некими дефолтными (например, нулевыми) значениями переменных-членов.
0
3188 / 2637 / 710
Регистрация: 25.03.2012
Сообщений: 9,522
Записей в блоге: 1
13.05.2019, 18:59 3
C++
1
2
3
4
5
6
7
8
9
10
11
12
class Figura
{
private:
    float storona;
    float ploshad;
    
public:
     void setvalues(float s, float p){ 
         storona=s;
         ploshad=p;
     }
};
но вообще это такой бред... поля сторона и площадь. Там же класс 95% даю - абстрактный будет!
0
57 / 40 / 21
Регистрация: 26.09.2018
Сообщений: 216
13.05.2019, 19:00 4
C++
1
2
3
4
5
6
7
8
9
10
11
12
class Figura
{
private:
    float storona;
    float ploshad;    
public:
    Figura(float a = 0.0, float b =0.0) : storona(a), ploshad(b) {} 
    void setStorona(float a) { this->storona = a; }
    void setPloshad(float a) { this->ploshad = a; }
    float getStorona() { return this->storona; }
    float getPloshad() { return this->ploshad; }
};
0
0 / 0 / 0
Регистрация: 29.03.2018
Сообщений: 100
13.05.2019, 19:17  [ТС] 5
Kuzia domovenok, а как внутри наследуемого класса вызвать переменную из private базового?
0
3188 / 2637 / 710
Регистрация: 25.03.2012
Сообщений: 9,522
Записей в блоге: 1
13.05.2019, 19:19 6
никак. protected для этого есть. но по-хорошему, у тебя есть методы класса setvalues
можешь аналогично вместо него сделать setStorona setPloshad
что ещё-то для счастья надо?
1
3201 / 1738 / 743
Регистрация: 07.02.2019
Сообщений: 4,770
13.05.2019, 19:30 7
ChioraYaz, если это все та же задача Правильно ли я понял условие задачи?
то вот я упростил:
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
#include <iostream>
 
class figure
{
public:
    virtual double S() const = 0;
    virtual double side() const = 0;
    virtual ~figure() {}
};
 
class square : public figure
{
    double side_;
public:
    square(double a = 0) :side_(a) {}
    virtual ~square() override {}
 
    virtual double S() const override { return side_ * side_; }
    virtual double side() const override { return side_; }
};
 
class romb : public figure
{
    double diag1_;
    double diag2_;
public:
    romb(double d1 = 0, double d2 = 0) :diag1_(d1), diag2_(d2) {}
    virtual ~romb() override {}
 
    virtual double S() const override { return diag1_ * diag2_ / 2; }
    virtual double side() const override { return std::sqrt((diag1_ * diag1_ + diag2_ * diag2_) / 4); }
};
 
double foo(const figure& fig1, const figure& fig2)
{
    if (fig1.S() == fig2.S())
        return fig1.side() / fig2.side();
    else
        return fig1.S() / fig2.S();
}
 
int main()
{
    square sq(5);
    romb rm(10, 5);
    std::cout << foo(sq, rm);
}
0
0 / 0 / 0
Регистрация: 29.03.2018
Сообщений: 100
13.05.2019, 20:11  [ТС] 8
В общем, получилось что-то, что соответствует заданию, но при стороне ромба 2 с углом 30 и стороне квадрата 3 выдаёт соотношение площадей -inf.
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
class Figura
{
private:
    float storona;
 
public:
    void setSt(float s)
    {
         storona=s;
    }
 
protected:
    float stP=storona;
};
 
 
 
class Romb : public Figura
{
private:
    int ugol;
 
public:
    void setUg(int u)
    {
        ugol=u;
    }
 
    float plSeek(float x,int y)
    {
        int z;
        z=x*x*sin(y*3.14159265/180);
        return z;
    }
 
    float seeker()
    {
        return plSeek(stP,ugol);
    }
 
    float stSeek()
    {
        return stP;
    }
};
 
 
class Kvadrat : public Figura
{
public:
    float plSeek(float x)
    {
        int z;
        z=x*x;
        return z;
    }
 
    float seeker()
    {
        return plSeek(stP);
    }
 
    float stSeek()
    {
        return stP;
    }
 
};
 
 
 
int main()
{
    Romb r;
    Kvadrat k;
    float a,b, plRomb, plKvadrat;
    int c;
 
    cout<<"ROMB"<<endl<<"Storona: ";cin>>a;
    cout<<"Ugol: ";cin>>c;
 
    r.setSt(a);
    r.setUg(c);
 
    cout<<"KVADRAT"<<endl<<"Storona: ";cin>>b;
 
    k.setSt(b);
 
    plRomb=r.seeker();
 
    plKvadrat=k.seeker();
 
    if(plRomb!=plKvadrat)
    {
        cout<<endl<<"Otnosheniye ploshadey r/k: "<<plRomb/plKvadrat;
    }
 
    if(plRomb==plKvadrat)
    {
        cout<<endl<<"Otnosheniye storon r/k: "<<r.stSeek()/k.stSeek();
    }
 
    return 0;
}
0
0 / 0 / 0
Регистрация: 29.03.2018
Сообщений: 100
14.05.2019, 07:29  [ТС] 9
Название: Безымянный.png
Просмотров: 34

Размер: 8.3 Кб
Функция, которая достаёт из базового класса значения сторон, точно не работает, так как точно работает функция, передающая их туда.
0
3188 / 2637 / 710
Регистрация: 25.03.2012
Сообщений: 9,522
Записей в блоге: 1
14.05.2019, 08:26 10
Цитата Сообщение от ChioraYaz Посмотреть сообщение
protected: float stP=storona;
удаляй это
0
0 / 0 / 0
Регистрация: 29.03.2018
Сообщений: 100
14.05.2019, 08:46  [ТС] 11
Но без этого же точно не будет работать.
0
3188 / 2637 / 710
Регистрация: 25.03.2012
Сообщений: 9,522
Записей в блоге: 1
14.05.2019, 08:52 12
ChioraYaz, с чего бы это? Если всё остальное без ошибок написать то заработает.
0
0 / 0 / 0
Регистрация: 29.03.2018
Сообщений: 100
14.05.2019, 09:19  [ТС] 13
А что делать с функциями, которые используют это значение?

Добавлено через 22 минуты
В общем, сделал stP функцией, немного переделал, и всё заработало. Вообще ни хрена не понял, почему то же самое, но с переменной, не работало.
0
0 / 0 / 0
Регистрация: 29.03.2018
Сообщений: 100
14.05.2019, 20:27  [ТС] 14
Совсем забыл скинуть код.

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
#include <iostream>
#include <cmath>
 
using namespace std;
 
 
 
class Figura
{
private:
    float storona;
 
public:
    void setSt(float s)
    {
         storona=s;
    }
 
protected:
    float stP()
    {
        return storona;
    }
};
 
 
 
class Romb : public Figura
{
private:
    float ugol;
 
public:
    void setUg(int u)
    {
        ugol=u;
    }
 
    float plSeek(float x,int y)
    {
        int z;
        z=x*x*sin(y*3.14159265/180);
        return z;
    }
 
    float seeker()
    {
        float z;
 
        z=stP();
 
        return plSeek(z,ugol);
    }
 
    float stSeek()
    {
        float z;
 
        z=stP();
 
        return z;
    }
};
 
 
class Kvadrat : public Figura
{
public:
    float plSeek(float x)
    {
        int z;
        z=x*x;
        return z;
    }
 
    float seeker()
    {
        float z;
 
        z=stP();
 
        return plSeek(z);
    }
 
    float stSeek()
    {
        float z;
 
        z=stP();
 
        return z;
    }
 
};
 
 
 
int main()
{
    Romb r;
    Kvadrat k;
    float a,b, plRomb, plKvadrat;
    int c;
 
    cout<<"ROMB"<<endl<<"Storona: ";cin>>a;
    cout<<"Ugol: ";cin>>c;
 
    r.setSt(a);
    r.setUg(c);
 
    cout<<"KVADRAT"<<endl<<"Storona: ";cin>>b;
 
    k.setSt(b);
 
    plRomb=r.seeker();
 
    plKvadrat=k.seeker();
 
    if(plRomb!=plKvadrat)
    {
        cout<<endl<<"Otnosheniye ploshadey r/k: "<<plRomb/plKvadrat;
    }
 
    if(plRomb==plKvadrat)
    {
        cout<<endl<<"Otnosheniye storon r/k: "<<r.stSeek()/k.stSeek()<<endl;
    }
 
    return 0;
}
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.05.2019, 20:27

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

Как обратиться к массивам в классе с модификатором доступа Private
Всем добрый день! подскажите пожалуйста, если в классе есть 2 массива с модификатором доступа...

Как изменить название кнопки в классе dialog при нажатии на кнопку в классе mainwindow
Добрый день, я около месяца как начал изучать QT, то есть новичок. Собственно дело в следующем,...

Private данные. Как приравнять переменную к нулю
Подскажите как прировнять переменную Quant нулю? class Text { public: Text() { } void...

Зачем в классе private?
Объясните пожалуйста кто-нибудь зачем в классе private? что он делает? и почему его не в public...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.