0 / 0 / 0
Регистрация: 02.07.2021
Сообщений: 12
1

Используйте модификатор const для переменных и функций, для которых это имеет смысл

07.04.2023, 07:52. Показов 880. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Нужно вписать модификатор const для переменных и функций, для которых это имеет смысл.
Уже не знаю куда можно его прописать, подскажите пожалуйста

straightedge.cpp

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
#pragma once
 
//определили с помощью ключевого слова
//class объект Straightedge
 
class Straightedge
{
    private: //данные имеют закрытый уровень доступа
        int Len; //Длина (целый тип)
        int Width; //ширина (целый тип)
        float Sum; //Сумма (вещественный тип)
 
    public: //откртый доступ
 
        //конструктор объекта, аргументы которого будут
        //инициализировать все данные объекта
        Straightedge(int _Len, int _Width, float _Sum);
 
        //Опишите конструктор объекта по умолчанию (без аргументов),
        //проинициализировав все данные
        Straightedge();
 
        //функция выводит данные на экран
        void Print();
 
        //Функция ввода
        void Input();
 
    ~Straightedge(); // деструктор
 
    // геттеры
    int GetLen() const;
    int GetWidth() const;
    float GetSum() const;
 
    // сеттеры
    bool SetLen(int);
    bool SetWidth(int);
    bool SetSum(float);
    
    operator double();
    //перегрузка оператора + через дружественную функцию
    friend double operator + (Straightedge& s1, Straightedge& s2); 
};
straightedge.cpp

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
#include <iostream>
#include "straightedge.h"
using namespace std;
 
//конструктор объекта, аргументы которого будут
//инициализировать все данные объекта
Straightedge::Straightedge(int length, int wid, float summa)
{
    if (SetLen(length) != true) {
        cout << "Недопустимое значение длины. Проверьте входные данные. Установлю значение 0." << endl;
        SetLen(0);
    }
 
    if (SetWidth(wid) != true) {
        cout << "Недопустимое значение ширины. Проверьте входные данные. Установлю значение 0." << endl;
        SetWidth(0);
    }
    if (SetSum(summa) != true) {
        cout << "Недопустимое значение суммы. Проверьте входные данные. Установлю значение 0." << endl;
        SetSum(0);
    }
}
    
 
//Опишите конструктор объекта по умолчанию (без аргументов),
//проинициализировав все данные
Straightedge::Straightedge()
{
    SetLen(10);
    SetWidth(5);
    SetSum(15);
}
 
//функция выводит данные на экран
void Straightedge::Print()
{
    cout << "Длина....: " << GetLen() << endl;
    cout << "Ширина...: " << GetWidth() << endl;
    cout << "Сумма....: " << GetSum() << endl
         << endl;
}
 
//Функция ввода
void Straightedge::Input()
{
    int tmplength;
    do {
        cout << "Введите длину: ";
        cin >> tmplength;
        if (tmplength < 0) {
            cout << "Длина неотрицательна" << endl;
        }
    } while (!SetLen(tmplength));
 
    int tmp_w;
    do {
        cout << "Введите ширину: ";
        cin >> tmp_w;
        if (tmp_w < 0) {
            cout << "Ширина неотрицательна" << endl;
        }
    } while (!SetWidth(tmp_w));
 
    float s;
    do {
        cout << "Введите сумму: ";
        cin >> s;
    } while (SetSum(s) != true);
}
 
Straightedge::~Straightedge()
{
    cout << "Destructor!!!" << endl;
}
 
 
// геттеры
int Straightedge::GetLen() const { return Len; }
int Straightedge::GetWidth() const { return Width; }
float Straightedge::GetSum() const { return Sum; }
 
 
 
// сеттеры
bool Straightedge::SetLen(int length)
{
    if (length >= 0) {
        Len = length;
        return true;
    }
    return false;
}
 
bool Straightedge::SetWidth(int wid)
{
    if (wid >= 0) {
        Width = wid;
        return true;
    }
    return false;
}
 
bool Straightedge::SetSum(float summa)
{
    Sum = summa;
    return true;
}
 
Straightedge :: operator double() 
{
    return this->GetLen();      
}
 
// оператор + - сумма длин двух линеек
double operator + (Straightedge& s1, Straightedge& s2) 
{
    return (s1.GetLen() + s2.GetLen());
}
group.h

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#ifndef GROUP_H
#define GROUP_H
#include "straightedge.h"
 
class Group { 
    private:
        int size; 
        Straightedge* arr; 
    public:
        Group (int g_size); 
        ~Group(); 
        void Print(); 
        int GetSize() const; 
        void PutStraightedge(int i, Straightedge& r);
        Straightedge& GetStraightedge(int i);
        void Input();
        double MeanSum(); //средняя сумма линеек из массива
        double MeanSum(double limit);  //средняя сумма с ограничением
        Straightedge& operator [] (int i);  //перегрузка индексирования
    
};
 
#endif
group.cpp

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
#include <iostream>
#include "group.h"
 
using namespace std;
 
Group :: Group(int g_size) //определение конструктора
{
    if (g_size > 0) //размер должен быть положительным
        size = g_size;
    else
        size = 5; //при некорректном размер назначаем размер 5
    arr = new Straightedge[size];
}
 
Group :: ~Group() //определение деструктора
{
    delete[] arr;
}
 
void Group :: Print() //вывод информации о линейках в массиве
{
    for (int i = 0; i < size; i++)
        arr[i].Print(); //вызывая функцию вывода для каждой линейки
}
 
int Group :: GetSize() const //функция, вовзращающая размер массива
{
    return size;
}
 
void Group :: PutStraightedge (int i, Straightedge& r) //функция записи на i-тую позицию массива данных о линейке r
{
    if (i >= 0 && i < size)
        arr[i] = r;
}
 
Straightedge& Group :: GetStraightedge (int i) //функция, возвращающая линейку из i-то позиции массива
{
    if (i >= 0 && i < size)
        return arr[i];
}
 
double Group :: MeanSum() //подсчет средней стоимости
{
    double l = 0;
    for (int i = 0; i < size; i++)
        l += arr[i].GetSum(); //складываем суммы
    return l / size; 
}
 
double Group :: MeanSum(double limit) //подсчет средней стоимости линеек, которые не дороже значения limit
{
    double l = 0;
    int count = 0;
    for (int i = 0; i < size; i++)
    {
        if (arr[i].GetSum() <= limit) //сравниваем цену линейки и заданный предел 
        {
            l += arr[i].GetSum(); //складываем суммы все подходящих под условие линеек
            count++; //счетчик таких линеек + 1
        }
    }
    if (count > 0)
        return l / (double)count;
    else
        return 0;
}
 
Straightedge& Group :: operator [](int i) //переопределение операции индексации
{
    if (i >= 0 && i < size) //проверка индекса на корректность
        return arr[i];
}
main.cpp
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
#include <iostream>
#include "straightedge.h"
#include "group.h"
 
using namespace std;
 
int main()
{
    setlocale(LC_ALL, "Russian");
    
    int lengths[5] = {10, 20, 30, 40, 50}; //описываем массив длин линеек
    int heights[5] = {2, 4, 6, 8, 10}; //описываем массив ширин линеек
    double sums[5] = {25, 40, 94, 19, 37}; //описываем массив цен
    Group group(5);//создаем объект Group с размером массива 5
 
    for (int i = 0; i < 5; i++)
    {
        Straightedge s(lengths[i], heights[i], sums[i]); //создаем новый объект класса "линейка"
        group.PutStraightedge(i, s); //помещаем линейку на  соответствующую позицию массива
    }
    group.Print(); //выводим информацию о массиве
    
    double l = group.GetStraightedge(2); //неявное преобразование типа Straightedge в double
    cout << "Typecast test for ruler with index [2]: " << l << endl;
    
    //проверка перегруженных операторов подсчета средней длины
    double mean1 = group.MeanSum();
    cout << "Средняя сумма: " << mean1 << endl;
    double limit = 30;
    double mean2 = group.MeanSum(limit);
    cout << "Средняя сумма с лимитом " << limit << ": " << mean2 << endl;
    
    //проверка переопределения оператора индексации
    Straightedge s3 = group[3];
    //s3.Print();
    
    double sum = group[1] + group[3];
    cout << "Length group[1] + group[3]: " << sum << endl;
    
    system ("pause");
    return 0;
    
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
07.04.2023, 07:52
Ответы с готовыми решениями:

Использвать модификатор const для переменных и функций, для которых это имеет смысл
Здравствуйте, форумчане! Подскажите, пожалуйста, что не так в следующем коде. С удовольствием...

Модификатор const для переменных и функций C++
Здравствуйте. У меня есть такая программа. .h #pragma once #include &lt;iostream&gt; #include...

Это имеет смысл для физики?
Привет форум! Когда-то давным - давно был брошен проект в аспирантуре. И сейчас я хотел бы призвать...

Модификатор const для параметра функции не const?
void foo(const int N) { int Arr; //&lt;-- ??? } В clang это работает. В VisualStudio 2015 нет.

Модификатор const в аргументах функций
Постоянно путаюсь в этих константах. Как писать грамотнее? Вот так: template&lt;typename...

1
Лежебока
328 / 244 / 95
Регистрация: 12.05.2021
Сообщений: 1,429
Записей в блоге: 2
07.04.2023, 21:48 2
Цитата Сообщение от Sara_Min Посмотреть сообщение
int lengths[5]
    int heights[5]
    double sums[5]
если 5 здесь фиксированное значение, то можно вынести в отдельную переменную с модификатором const
0
07.04.2023, 21:48
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
07.04.2023, 21:48
Помогаю со студенческими работами здесь

Когда имеет смысл применять модификатор "in" параметра метода?
Модификатор &quot;in&quot; параметра метода означает, что: 1. Аргумент будет передаваться в метод по ссылке...

Модификатор static для функций, используемых в main
Всем привет, у меня такой вопрос, если ли возможность в следующем коде как-то избежать добавления...

Имеет ли смысл поступать в ВУЗ для карьеры в IT
Такой вопрос возник. Имеет ли смысл вообще поступать в IT ВУЗ в России? Играет ли роль диплом, и...

Имеет ли смысл для большого прайса на странице?
Добрый день. Ситуация такова. Была страница, она продвигается, хорошо ранжируется. Теперь...

Адекватно так делать и имеет ли это смысл?
Здравствуйте, читал учебник по C и увидел задачу про вычисление остатка от деления, совмещённое с...

Функция swap перестановки значений двух переменных для данных разных типов. Используйте template
не могу решить ( честно говоря вообще не понимаю его ) ((((( Напишите функцию swap перестановки...


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

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

Новые блоги и статьи
Это работает. Скорость асинхронной логики велика. Вопрос видимо останется в стабильности. Плата - огонь!
Hrethgir 13.01.2025
По прошлому проекту в Logisim Evolution прилагаю файл архива проекта Gowin Eda и снимок. Восьмибитный счётчик из сумматора+ генератор сигнала согласования+ стартер fast регистров. Файлы прилагаю. . . .
UserScript для подсветки кнопок языков программировани­­­­я в зависимости от текущего раздела
volvo 13.01.2025
В результате работы этого скрипта подсвечиваются нужные кнопки не только в форме быстрого ответа, но и при редактировании сообщения: / / ==UserScript== / / @name CF_DefaultLangSelect / / . . .
Введение в модели и алгоритмы машинного обучения
InfoMaster 12.01.2025
Машинное обучение представляет собой одну из наиболее динамично развивающихся областей искусственного интеллекта, которая фокусируется на разработке алгоритмов и методов, позволяющих компьютерам. . .
Как на Python создать нейросеть для решения задач
InfoMaster 12.01.2025
В контексте стремительного развития современных технологий особое внимание уделяется таким инструментам, как нейросети. Эти структуры, вдохновленные биологическими нейронными сетями, используются для. . .
Как создать нейросеть для генерации картинок на Python
InfoMaster 12.01.2025
Генерация изображений с помощью искусственных нейронных сетей стала одним из наиболее захватывающих направлений в области компьютерного зрения и машинного обучения. В этой статье мы рассмотрим. . .
Создание нейросети для генерации текста на Python
InfoMaster 12.01.2025
Нейросети, или искусственные нейронные сети, представляют собой модели машинного обучения, вдохновленные работой человеческого мозга. Они состоят из множества взаимосвязанных узлов, или "нейронов",. . .
Как создать нейросеть распознавания изображений на Python
InfoMaster 12.01.2025
Введение в распознавание изображений с помощью нейросетей Распознавание изображений с помощью нейронных сетей стало одним из самых впечатляющих достижений в области искусственного интеллекта. Эта. . .
Основы искуственного интеллекта
InfoMaster 12.01.2025
Искусственный интеллект (ИИ) представляет собой одну из наиболее динамично развивающихся областей современной науки и технологий. В широком смысле под искусственным интеллектом понимается способность. . .
Python и нейросети
InfoMaster 12.01.2025
Искусственные нейронные сети стали неотъемлемой частью современных технологий, революционизировав множество областей - от медицинской диагностики до автономных транспортных средств. Python, благодаря. . .
Python в машинном обучении
InfoMaster 12.01.2025
Python стал неотъемлемой частью современного машинного обучения, завоевав позицию ведущего языка программирования в этой области. Его популярность обусловлена несколькими ключевыми факторами, которые. . .
Создание UI на Python с TKinter
InfoMaster 12.01.2025
TKinter — это одна из наиболее популярных библиотек для создания графических интерфейсов пользователей (GUI) в языке программирования Python. TKinter входит в стандартную библиотеку Python, что. . .
HTML5 в разработке мобильных приложений
InfoMaster 12.01.2025
Введение: Обзор роли HTML5 в мобильной разработке В современном мире мобильных технологий HTML5 стал ключевым инструментом для разработки кроссплатформенных приложений. Эта технология произвела. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru