Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
0 / 0 / 0
Регистрация: 09.10.2018
Сообщений: 87

Модификатор const для переменных и функций C++

15.02.2021, 14:30. Показов 3107. Ответов 40
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. У меня есть такая программа.
.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
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#pragma once
#include <iostream>
#include <string>
 
using namespace std;
 
class Ship
{
private:
    string name;
    string m_val;
    string valueName;
    string type;
    string t_val;
    string valueType;
    int displacement;
    int d_val;
    int valueDisplacement;
 
public:
 
    Ship(const string valueName, int valueDisplacement, const string valueType);
        
    Ship() : m_val{}, d_val{}, t_val{} {} // конструктор по умолчанию
 
    
 
    //NAME
    const string get_Name() const;
    void set_Name(const string valueName);
 
    //displacement
    const int get_Displacement() const; 
    void set_Displacement(const int valueDisplacement);
 
    //type
    const string get_Type() const;
    void set_Type(const string valueType);
 
 
    void Print() const; // функция вывода данных на экран
 
    void Input(); // функция ввода данных с клавиатуры
};
.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
#define _CRT_SECURE_NO_WARNINGS
 
#include <cstdlib>
#include "main.h"
#include <Windows.h>// чтобы работала функция SetConsole
 
using namespace std;
 
 
Ship::Ship (const string valueName, int valueDisplacement, const string valueType) //конструктор с параметрами
    //: m_val{}, d_val {}, t_val{}
{
    set_Name(valueName);
    set_Displacement(valueDisplacement);
    set_Type(valueType);
}
//NAME
const string Ship::get_Name() const
{
        return m_val;
}
 
void Ship:: set_Name(const string valueName)
{
    string s = "#,&"; //введем условие, чтобы в названии не использовали символы # и &, например
    for (auto const & r : s)
 
        if (valueName.find(r) != string::npos)
            cerr << "Неверно указано наименование судна" << endl;
        else
            m_val = valueName;
 
}
 
//displacement
const int Ship::get_Displacement() const
{
    return d_val;
}
 
void Ship::set_Displacement(const int valueDisplacement)
{
    if (valueDisplacement > 1000 && valueDisplacement < 1000000)
        d_val= valueDisplacement;
 
    else
        cerr << "Неверно указана величина водоизмещения" << endl;
}
 
//type
const string Ship::get_Type() const
{
    return t_val;
}
 
void Ship::set_Type(const string valueType)
{
    string s = "#,&";
    for (auto const & r : s)
 
        if (valueType.find(r) != string::npos)
            cerr << "Неверно указан тип судна" << endl;
        else
    t_val= valueType;
}
 
 
void Ship::Print() const // функция вывода данных на экран
{
    cout << "\nНаименование\t" << get_Name()  << "\nВодоизмещение\t" << get_Displacement() << "\nТип\t\t" << get_Type() << endl;
}
 
 
void Ship::Input() // функция ввода данных с клавиатуры
{
    cout << "\nВведите наименование корабля и нажмите Enter\t" << endl; //выводим сообщение пользователю о вводимых данных
    cin >> valueName;
    Ship ::set_Name(valueName);
    cout << "\nВведите Водоизмещение корабля и нажмите Enter\t";  //выводим сообщение пользователю о вводимых данных
    cin >> valueDisplacement;
    Ship::set_Displacement(valueDisplacement);
    cout << "\nВведите Тип корабля и нажмите Enter\t"; //выводим сообщение пользователю о вводимых данных
    cin >> valueType;
    Ship::set_Type(valueType);
}
 
int main()
{
    setlocale(LC_CTYPE, "rus"); SetConsoleCP(1251); SetConsoleOutputCP(1251); // для вывода информации на русском языке
    Ship firstship("Титаник", 52310, "пассажирский");
    firstship.Print(); // выводим данные на экран
 
    //const Ship *Ship1;
    Ship *Ship1;
    const string name2 = "Аврора";
    const string name3 = "крейсер";
    Ship1 = new  Ship(name2, 6731, name3) ; // создание объекта,  вызов конструктора с тремя параметрами
    Ship1-> Print(); // выводим данные на экран
    delete Ship1; // освобождаем память
 
    Ship Ship2;//создание объекта,  используется конструктор без параметров
    
    Ship2.Input();
    Ship2.Print();
 
    system("pause"); // задайте ожидание (паузу) перед выходом из программы
 
    return 0;
}
Преподаватель указал на то, что необходимо использовать модификатор const для переменных и функций, для которых это имеет смысл. Я его вставила в геттеры,т.к. читала, что они всегда используются с const . И в функцию вывода.
Но еще ему не нравится фрагмент
C++
1
2
const string name2 = "Аврора";
Ship1 = new Ship(name2, 6731, "крейсер"); // создание объекта,  вызов конструктора с тремя параметрами.

Посмотрите пожалуйста, может я чего лишего понаставила или наоборот чего не хватает.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
15.02.2021, 14:30
Ответы с готовыми решениями:

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

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

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

40
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
16.02.2021, 13:06
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от _stanislav Посмотреть сообщение
оэтому я в кодах в книгах никогда не видел такой связки const int, вообще о такой технике никто не упоминал никогда, сколько я не читал.
О производительности и мифах:
https://www.google.com/url?sa=... 1WHAY06XAk
В Решение сложных задач на С++ /Саттер/ гл.10 Понемногу обо всём п.10.3 Корректность const сказано
Рекомендация
2. ...Обычно передача const по значению не имеет смыла и в лучшем случае запутывает программиста.
Это как раз о том, что мудрее спрятать в реализации.
Я - никто чтобы спорить с Саттером (только разделение свободной памяти и кучи в его исполнении - это что-то), но я просто не согласен. Если программист не родился за... запутанным, информация о типе в виде const не запутает его. Я бы оставлял и в определении и в объявлении (как часто и делается). Зачем писать комментарии и рассуждать о самодокументирующем коде, если безневинное const в объявлении рекомендуется спрятать?
Дело вкуса (имхо)
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
16.02.2021, 13:06

Модификатор доступа const
Здравсвуйте, прошу помочь с вопросом. В общем имеется такой класс: class Animator : public sf::Drawable { private: ...

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

Модификатор const Очередные грабли с++?
Представленный ниже код не компилируется. В чем здесь может быть проблема? class CFirst { public: int GetValue() { return...

Модификатор const в качестве возвращаемого значения
const int get_size(const int&amp; a) { return a; } int main() { const int size = get_size(5);

Чисто виртуальные классы. Модификатор const
Приветствую всех! Известно, что чисто виртуальный (абстрактный) класс можно получить class A { public: virtual void test()=0; };...


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

Или воспользуйтесь поиском по форуму:
41
Ответ Создать тему
Новые блоги и статьи
Море в объективе
kumehtar 06.07.2026
Хотел написать много проникновенных слов, но передумал. Оно само - говорит. Кто слышит тот слышит.
Оказывается, Unreal Engine позволяет качество на порядки выше, чем было в Lineedge
Etyuhibosecyu 05.07.2026
Жаль, конечно, что я не узнал об этом, пока Lineedge существовала, а то бы Noname2331 написал, что волки превращаются в пиксельную кашу, а я бы его попросил скачать какую-нибудь бриллиантовую или Pro. . .
Doom для терминала без стрельбы и монстров. 3D Raycasting на ascii.
dcc0 05.07.2026
Попросил нейронную сеть deepai. org написать рейкастинг 3D с библиотекой ncurses для Linux. Чтобы можно было ходить на стрелочки. Чтобы стены были отрисованы символами. Справилась. Первый вариант. . .
Установка статуса документа по условию
Maks 05.07.2026
Алгоритм из решения ниже реализован на нетиповом документе "НарядПутевка" разработанного в КА2. Задача: в табличной части "Материалы" документа при записи автоматически устанавливать статус. . .
Сезонность и суточность закисления почв
anaschu 04.07.2026
200 часов это все равно моловато. Есть ситуации, но нестандартные, когда смена происходит за 5 лет. Но обычно это 50 лет и более. Наверное, закисление почвы происходит сезонно в средней. . .
В чем ценность человеческого опыта в глобальном смысле?
kumehtar 03.07.2026
Возможно, ценность человека не в том, что он однажды достигает мудрости, а в том, что он становится носителем карты пути. Он знает не только истину, но и последовательность внутренних изменений,. . .
интеграция AnyLogic с самописным REST API и переход на Odoo
anaschu 03.07.2026
Успешная интеграция AnyLogic с самописным REST API и переход на промышленную Odoo WMS Сегодня проделал огромный путь от простой симуляции физических процессов до построения полноценной. . .
Поиск всех путей на ориентированном графе. Linux
dcc0 02.07.2026
Переработка старого кода из моей статьи. Через несколько переработок от PHP кода к C89 (надеюсь, 89). Но довольно запутанно получилось. Код для Linux. Но если убрать time и то, что с ним. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru