Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
10 / 10 / 1
Регистрация: 20.08.2016
Сообщений: 54
1

Где поставить const?

06.01.2021, 13:40. Показов 2028. Ответов 4
Метки нет (Все метки)

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

main.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
#pragma once
class Glass // определите с помощью ключевого слова class объект Glass
{
private: // Пусть данные имеют закрытый уровень доступа (private)
  int gdepth; //толщина
  int gcolor; //цвет
  char gmodels; //марка
 
public:
  Glass ( int, int, char ); // протатип конструктор инициализации
  Glass();// протатип конструктор по умолчанию
  ~Glass(); // протатип деструктор
 
  void Print ( void ); //протатип вывода данных в консоль
  void Input ( void ); // протатип ввода данных пользователем
  bool Check_correct ( int, char ); //протатип проверки введенных данных
  void SetGdepth ( int ); // прототип метода записи в приватное поле толщины стекла
  int GetGdepth(); // прототип метода чтения из приватного поля класса толщины стекла
  void SetGcolor ( int ); // прототип метода записи в приватное поле цвета стекла
  int GetGcolor(); // прототип метода чтения из приватного поля класса цвета стекла
  void SetGmarka ( char ); // прототип метода записи в приватное поле марки стекла
  char GetGmarka(); // прототип метода чтения из приватного поля класса марки стекла
};


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
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
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
//Используется стиль GNU
#include <iostream>
#include <stdlib.h> // c помощью include в ключаем файлы и main.h с протатипами
#include <string.h>
#include "main.h"
 
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
 
 
Glass::Glass ( int gw, int gc, char gm ) // конструктор инициализации, Опишите конструктор объекта, аргументы которого будут инициализировать все данные объекта.
{
  gdepth = gw;// толщина, присваиваем формальные параметры приватным полям класса
  gcolor = gc;// цвет
  gmodels = gm;// марка
 
}
 
Glass::Glass() {} // конструктор по умолчанию,  Опишите конструктор объекта по умолчанию (без аргументов)
 
Glass::~Glass() // реализация деструктора класса glass
{
 
}
 
void Glass::SetGdepth ( int znD ) // реализация протатипа записи данных толщины стекла в приватное поле
{
  gdepth = znD; //внести знаячение
}
 
int Glass::GetGdepth() // реализация протатипа чтения данных толщины стекла из приватного поля
{
  return gdepth;// прочитать значение
}
 
void Glass::SetGcolor ( int znC ) // реализация протатипа записи данных цвета стекла в приватное поле
{
  gcolor = znC; //внести знаячение
}
 
int Glass::GetGcolor() // реализация протатипа чтения данных цвета стекла  из приватного поля
{
  return gcolor;// прочитать значение
}
 
void Glass::SetGmarka ( char znCh ) // реализация протатипа записи данных марки стекла в приватное поле
{
  gmodels = znCh; //внести знаячение
}
 
char Glass::GetGmarka() // реализация протатипа чтения данных марки стекла из приватного поля
{
  return gmodels;// прочитать значение
}
 
 
void Glass::Print ( void ) // функция вывода в консоль, Опишите в объекте функцию void Print() с открытым уровнем доступа (public)
{
  std::cout<< "Tolshina stekla: " << GetGdepth() << " mm \n"; // вывод в консоль толщины выводим в консоль содержимое приватных полей класса
  std::cout<< "Cvet stekla: " << GetGcolor() << "\n";// вывод в консоль цвета
  std::cout<< "Marka stekla: " << GetGmarka() << "\n";  // вывод в консоль марки
}
 
bool Glass::Check_correct ( int zn, char act ) // реализация протатипа проверки введенных данных
{
  if ( act=='r' ) // проверка толщины стекла на введенное значение
    {
      if ( std::cin.fail() ) // проверка введенного типа данных
        {
          std::cout<<"\nZnachenie mozhet bit tolko celim\n"; // вывод сообщения пользователю
          std::cin.clear();  // востановление консоли в исходное состояние
          std::cin.ignore ( 32767,'\n' ); // игнорирование значения буфера
          return true; // вернуть результат
        }
      if ( zn>20 ) // толщина не может быть более 20 мм
        {
          std::cout<<"\nTolshina stekla ne mozhet bit bolee 20mm\n"; // вывод сообщения пользователю
          return true;   // вернуть результат
        }
      if ( zn<0||zn==0 ) // толщина не может быть = 0
        {
          std::cout<<"\nTolshina stekla ne mozhet bit otricatelnim ili = 0\n";// вывод сообщения пользователю
          return true; // вернуть результат
        }
      return false; // вернуть результат
    }
 
  if ( act=='c' ) // проверка цвета стекла на введенное значение
    {
      if ( std::cin.fail() ) // проверка типа данных
        {
          std::cout<<"\nZnachenie mozhet bit tolko celim\n";// вывод сообщения пользователю
          std::cin.clear(); // востановление консоли в исходное состояние
          std::cin.ignore ( 32767,'\n' ); // игнорирование значения буфера
          return true;// вернуть результат
        }
      if ( zn>4||zn<0||zn==0 ) // проверка введеного цвета стекла
        {
          std::cout<<"\nVi vveli nedopustimiy cvet\n";// вывод сообщения пользователю
          return true;  // вернуть результат
        }
      return false;// вернуть результат
    }
 
  if ( act=='m' ) //проверка марки стекла
    {
      if ( isdigit ( zn ) ) // проверка число или символ
        {
          std::cout<<"\nMarka stekla ukazivaetsa simvolom\n"; // вывод сообщения пользователю
          return true;// вернуть результат
        }
      return false;// вернуть результат
    }
}
 
void Glass::Input ( void ) // метод ввода с клавиатуры
{
  int x,y; // переменные для запрошенных параметров
  char z; // переменная для марки стекла
  do
    {
      std::cout<<"Ukazhite tolshinu stekla: "; // вывод в консоль, сообщения к пользователю
      std::cin>>x;  // пользователь вводит значение
    }
  while ( Check_correct ( x,'r' ) );
 
  do
    {
      std::cout<<"\nUkazhite cvet red-1 black-2 green-3 purple-4:  ";// вывод в консоль, сообщения к пользователю
      std::cin>>y; // пользователь вводит значение
    }
  while ( Check_correct ( y,'c' ) );
 
  do
    {
      std::cout<<"\nUkazhite marku stekla: ";// вывод в консоль, сообщения к пользователю
      std::cin>>z;  // пользователь вводит значение
    }
  while ( Check_correct ( z,'m' ) );
 
  SetGdepth(x); //вносим введеное значение в приватное поле толщины стекла
  SetGcolor(y); //вносим введеное значение в приватное поле цвета стекла
  SetGmarka(z); //вносим введеное значение в приватное поле марки стекла
 
  Print(); // выводим содержимое в консоль
}
 
 
 
int main ( void ) // основная программа
{
  const int zn1 = 5;
  const int zn2 = 3;
  const char zn3 = 'M';
 
  Glass MyG( zn1, zn2, zn3 ); // создаем объект и вызываем конструктор инициализации
  MyG.Print();// вызываем метод выводящий данные в консоль
 
  Glass *MyZ = new Glass();// создаем указатьель типа стекло, создаем динамический объект
 
 
  MyZ->Print();// вызываем метод выводящий данные в консоль
  delete MyZ;// уничтожаем динамический объект
 
  Glass MyD();// создаем объект и вызываем конструктор без параметров
 
  MyG = Glass(); // явный вызов конструктора без параметров
 
 
  MyG.Input();// запускаем метод ввода с клавиатуры
 
 
  system ( "pause" ); // остановка что б консоль не закрылась
 
 
  return 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.01.2021, 13:40
Ответы с готовыми решениями:

int const * const foo(const int* param) const - разъясните значение квалификаторов
int const * const foo(const int* param) const -----1------2----------3----------------4 1: ?...

Const верхнего и нижнего уровня, где?!
Читаю книгу, и все не как не могу точно понять, где const верхнего, а где нижнего уровня. const...

Вопрпос про const: в какой области памяти они находятся, и где это объявлять ?
Приветствую. У меня вот такая задача - завести массив констант, причём он используется ТОЛЬКО...

Ошибка: Binding 'const Ship' to reference of type 'Ship&' discard qualifiers. Не пойму, где теряется const
есть public метод класса с квалификатором const тип _ships - QMultiMap QMultiMap имеет...

4
207 / 100 / 20
Регистрация: 30.06.2020
Сообщений: 848
06.01.2021, 13:43 2
Цитата Сообщение от Scinar Посмотреть сообщение
Подскажите пожалуйста где применить const
Ищите значения, которые не меняются. Вот например у вас толщина в одном месте просто числом указана в условии, если где-то ещё используется такое же сравнение - делаете const переменную из этого числа. И так со всеми числами.

Кстати у вас уже есть они. Вам нужно больше?
Цитата Сообщение от Scinar Посмотреть сообщение
const int zn1 = 5;
  const int zn2 = 3;
  const char zn3 = 'M';
0
10 / 10 / 1
Регистрация: 20.08.2016
Сообщений: 54
06.01.2021, 13:48  [ТС] 3
Не нравится, говорит что это не считается

Добавлено через 2 минуты
Возможно где то в методах можно применить, но зачем?, остальные значения все меняются. Поэтому и найти не могу, куда воткнуть этот const
0
207 / 100 / 20
Регистрация: 30.06.2020
Сообщений: 848
06.01.2021, 13:48 4
Лучший ответ Сообщение было отмечено Scinar как решение

Решение

Scinar, а у вас в принципе только в одном месте можно const применить. Для максимальной толщины стекла. В принципе то у вас больше и нет особых требований к стеклу, только толщина
Цитата Сообщение от Scinar Посмотреть сообщение
if ( zn>20 ) // толщина не может быть более 20 мм
0
6579 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
06.01.2021, 14:13 5
Лучший ответ Сообщение было отмечено Scinar как решение

Решение

Цитата Сообщение от Scinar Посмотреть сообщение
Программу я написал, работает без ошибок, но преподаватель требует применить модификатор const для переменных и функций, для которых это имеет смысл
Все методы, которые не изменяют значения переменных объекта сделай константными. У тебя это как минимум Print, Check_correct, GetGdepth, GetGcolor, GetGmarka

C++
1
 char GetGmarka() const; // прототип метода чтения из приватного поля класса марки стекла
Добавлено через 44 секунды
C++
1
 void Print ( void ) const; //протатип вывода данных в консоль
и т.д.
0
06.01.2021, 14:13
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.01.2021, 14:13
Помогаю со студенческими работами здесь

char operator[](unsigned short offset) const; // что означает const?
Собстенно вопрос уже озвучен :).

Что это bool operator== (const CLASS&) const;
Что это? class CLASS { public: bool operator== (const CLASS&amp;) const; ...

Отрисовка линий движения материальной точки при u_1=const и u_2=const
Добрый день. У меня не получается построить графики движения материальной точки для u_1=const и...

Const в параметрах. Перед чем нужно употребить const дабы обезопасить данные от изменения
const int Counter(const TSNum *Start) { int c=0; while(Start!=NULL){Start=Start-&gt;next;} ...

Невозможно преобразовать параметр 1 из 'const char [3]' в 'const wchar_t *
void CprojectDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) { // TODO: добавьте...

Ошибка E2034: Cannot convert 'char const[8]' to 'const wchar_t *'
Прошу прощения за свой вопрос, но я никак не пойму где ошибка? использую c++ builder 10 (если это...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru