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

Классы. Разделение интерфейса и реализации

12.11.2022, 11:10. Показов 1925. Ответов 36
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Подскажите, пожалуйста с реализации программы:

Суть задачи: в файле Rect.h я записываю класс Rect с набором методов. В файле Rect.cpp я описываю методы. И, соответственно, в файле main.cpp я вывожу результат программы.

Код из файла Rect.h:

C++
1
2
3
4
5
6
7
8
9
10
11
12
class Rect
{
    private:
        int dlina, shirina;
    public:
        int setdl();
        int setsh();
        int plosh(int dl, int sh);
        int per(int dl, int sh);
        void mash(int dl, int sh, double chislo);
        void info(int dl, int sh);
};
Код из файла Rect.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
#include "Rect.h"
#include <iostream>
 
using namespace std;
 
Rect* a = new Rect;
 
int Rect::setdl()
{
    cout << "Введите значение длины: "; cin >> dlina;
    return dlina;
}
int Rect::setsh()
{
    cout << "Введите значение ширины: "; cin >> shirina;
    return shirina;
}
int Rect::plosh(int dl, int sh)
{
    cout << "Площадь прямоугольника = " << dl*sh << endl;
    return dl*sh;
}
int Rect::per(int dl, int sh)
{
    cout << "Периметр прямоугольника = " << 2*dl+2*sh << endl;
    return 2*dl+2*sh;
}
void Rect::mash(int dl, int sh, double chislo)
{
    cout << "Масштабирование прямоугольника: " << endl;
    cout << "Длина - " << dl*chislo << " : " << dl << endl;
    cout << "Ширина - " << sh*chislo << " : " << sh << endl;
}
void Rect::info(int dl, int sh)
{
    cout << "Информация о прямоугольнике: " << endl;
    cout << "Длина = " << dl << endl;
    cout << "Ширина = " << sh << endl;
    plosh(dl, sh);
    per(dl, sh);
}

Код из файла main.cpp:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include "Rect.h"
#include <iostream>
#include <cmath>
 
using namespace std;
 
int main()
{
    Rect* a = new Rect;
    double chislo;
    int dlina = a->setdl();
    int shirina = a->setsh();
    cout << "Введите дробное положительное число для масштабирования: "; cin >> chislo;
    a->mash(dlina, shirina, chislo);
    a->info(dlina, shirina);
    return 0;
}

Первый раз пробую разделение в ООП и не совсем могу понять, что и где не так. Ошибок множество выдает и по итогу ничего не выводит. Если можете, укажите на места, где нужно исправить код.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
12.11.2022, 11:10
Ответы с готовыми решениями:

Разделение интерфейса и реализации
Добрый день. Пытаюсь разделить проект, создал второй cpp и h файлы. Переменные объявлял в .h, были ошибки многократно определенного...

Какие механизмы обеспечивают разделение интерфейса и реализации?
Добрый день! Не подскажите какие механизмы обеспечивают разделение интерфейса и реализации? Чем больше – тем лучше.

Отделение интерфейса от реализации класса: компиляция кода реализации
Доброго времени суток, У меня возникла проблема с отделением интерфейса от реализации класса. Допустим, у меня есть три файла: 1....

36
631 / 526 / 104
Регистрация: 05.08.2022
Сообщений: 2,810
12.11.2022, 15:16
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Fershtein Посмотреть сообщение
Вы же сами прочитали: В dev c++ выдает ошибку: исходный файл не откомпилирован.
Это ни о чем.
0
4 / 4 / 0
Регистрация: 07.03.2019
Сообщений: 249
12.11.2022, 15:22  [ТС]
sdf45,
Цитата Сообщение от sdf45 Посмотреть сообщение
Тоесть геттер должен возвращать значение, сеттер присваивать и тд
Хорошо. Как мне одним методом задать длину?
0
 Аватар для Kuzia domovenok
4268 / 3328 / 926
Регистрация: 25.03.2012
Сообщений: 12,545
Записей в блоге: 1
12.11.2022, 15:35
Цитата Сообщение от Fershtein Посмотреть сообщение
Хорошо. Как мне одним методом задать длину?
как задать длину? - так
C++
1
2
3
4
5
6
a->setdl(10); //задали длину 10
a->setdl(10+25/2); //задали длину из выражения
int temp;
cout<<"input a->dlina: ";
cin>>temp;
a->setdl(temp); //задали длину c клавиатуры
про то, как для этого требуется задать длину в методе setdl тебе SmallEvil уже 20 постов как показать пытается.
1
4 / 4 / 0
Регистрация: 07.03.2019
Сообщений: 249
12.11.2022, 15:36  [ТС]
sdf45,
Цитата Сообщение от sdf45 Посмотреть сообщение
Вот и указывают же Вам.
Это такие же указания, как читать заместо учебника в школе серьезную научную работу.

Мне можно объяснить проще? Типа "часть моего кода" неправильно, потому что то-то и то-то. Надо писать заместо "части моего кода" вот "этот код"
0
Покинул чат.
1133 / 728 / 195
Регистрация: 30.03.2021
Сообщений: 2,379
12.11.2022, 15:37
в самом простом виде без правила трех или пяти
(всё это вам уже выше написали, я просто свел в код)
Кликните здесь для просмотра всего текста

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#ifndef TRECT_H
#define TRECT_H
class TRect
{
public:
    TRect();
    TRect(const int &w, const int &h);
    
public:
    void setWidth(const int &w);
    void setHeight(const int &h);
    int width()const;
    int height()const;
    int square()const;
    int perimeter()const;
    void scale(const int &factor);
    
private:
    int m_width, m_height;
};
#endif // TRECT_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
#include "trect.h"
 
TRect::TRect():m_width(0), m_height(0)
{}
 
TRect::TRect(const int &w, const int &h):m_width(w), m_height(h)
{}
 
void TRect::setWidth(const int &w)
{
    m_width=w;
}
 
void TRect::setHeight(const int &h)
{
    m_height=h;
}
 
int TRect::width() const
{
    return m_width;
}
 
int TRect::height() const
{
    return m_height;
}
 
int TRect::square() const
{
    return m_width * m_height;
}
 
int TRect::perimeter() const
{
    return 2*(m_width+m_height);
}
 
void TRect::scale(const int &factor)
{
    m_width*=factor;
    m_height*=factor;
}


C++
1
2
3
4
5
6
7
8
    TRect rect;
    rect.setWidth(10);
    rect.setHeight(20);
    cout<<rect.square();
 
    TRect rect2(10,10);
    rect2.scale(2);
    cout<<rect2.square();
1
4 / 4 / 0
Регистрация: 07.03.2019
Сообщений: 249
12.11.2022, 15:38  [ТС]
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
a->setdl(10); //задали длину 10
int temp;
cin>>temp;
a->setdl(temp);
Kuzia domovenok,

Это я знаю. Метод мне нужно задать, где я ввожу значение длины
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
12.11.2022, 15:47
Цитата Сообщение от Fershtein Посмотреть сообщение
Метод мне нужно задать, где я ввожу значение длины
Человек хочет упорно вводить из клавиатуры данные в методе класса.
А я упорно этого не хочу
Рассказывать про перегруженные операторы тоже, ему же не нужна "серьезная научная работа".
Будем ждать помощников его уровня. А что делать ?
1
4 / 4 / 0
Регистрация: 07.03.2019
Сообщений: 249
12.11.2022, 15:51  [ТС]
Цитата Сообщение от sdf45 Посмотреть сообщение
#ifndef TRECT_H
#define TRECT_H
class TRect
sdf45, Вот это обязательно в файле с классом?

Добавлено через 1 минуту
Цитата Сообщение от SmallEvil Посмотреть сообщение
Будем ждать помощников его уровня.
SmallEvil, Я уже понял, что вы все супер-пупер разработчики С++.

Мне сказали сделать так и все. Не хотите помочь в том ключе, в котором меня просят - не надо пытаться мне объяснять что-то другое
0
Покинул чат.
1133 / 728 / 195
Регистрация: 30.03.2021
Сообщений: 2,379
12.11.2022, 15:53
Цитата Сообщение от Fershtein Посмотреть сообщение
Вот это обязательно в файле с классом?
ну, желательно, это мне IDE автоматически генерит, можете пока убрать и не заморачиваться
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
12.11.2022, 15:55
Цитата Сообщение от Fershtein Посмотреть сообщение
Мне сказали сделать так и все. Не хотите помочь в том ключе, в котором меня просят - не надо пытаться мне объяснять что-то другое
Так откуда же я мог знать что вам МОЖНО объяснять а что НЕЛЬЗЯ ?

Добавлено через 38 секунд
Fershtein, к тому же последний пост адресован как раз таки не вам.
0
Покинул чат.
1133 / 728 / 195
Регистрация: 30.03.2021
Сообщений: 2,379
12.11.2022, 15:58
Цитата Сообщение от Fershtein Посмотреть сообщение
Не хотите помочь в том ключе, в котором меня просят - не надо пытаться мне объяснять что-то другое
Fershtein, зря Вы так... Эти умные дядьки как раз пытаются направить Вас в правильном направлении, изначально. Иначе привыкните делать неправильно, будут кучи ошибок и отвращение к программированию.
0
4 / 4 / 0
Регистрация: 07.03.2019
Сообщений: 249
12.11.2022, 16:12  [ТС]
Цитата Сообщение от sdf45 Посмотреть сообщение
Эти умные дядьки как раз пытаются направить Вас в правильном направлении,
Я не могу назвать это объяснением. Объяснять еще уметь надо

Добавлено через 6 минут
Мне можно объяснить проще? Типа "часть моего кода" неправильно, потому что то-то и то-то. Надо писать заместо "части моего кода" вот "этот код"

Я могу получить вот подобное объяснение?
0
 Аватар для Kuzia domovenok
4268 / 3328 / 926
Регистрация: 25.03.2012
Сообщений: 12,545
Записей в блоге: 1
12.11.2022, 16:38
Цитата Сообщение от Fershtein Посмотреть сообщение
Мне можно объяснить проще? Типа "часть моего кода" неправильно, потому что то-то и то-то. Надо писать заместо "части моего кода" вот "этот код"
Нет смысла - на это ты отвечаешь
Цитата Сообщение от Fershtein Посмотреть сообщение
Это я знаю. Метод мне нужно задать,
Цитата Сообщение от Fershtein Посмотреть сообщение
не надо пытаться мне объяснять что-то другое
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
12.11.2022, 16:39
Цитата Сообщение от Fershtein Посмотреть сообщение
Типа "часть моего кода" неправильно, потому что то-то и то-то. Надо писать заместо "части моего кода" вот "этот код"
Вся беда в том что изначальный код неправильный весь.
Рабочих частей там нету, поэтому, я не могу так поступить.

Других попыток вы не показали.
Кроме :
Цитата Сообщение от Fershtein Посмотреть сообщение
Я вот пользуюсь той информацией, которую мне дали на лекции.
Цитата Сообщение от Fershtein Посмотреть сообщение
Нужно без конструктора сделать.
Цитата Сообщение от Fershtein Посмотреть сообщение
Ну хочу я так сделать. Это же не ломает компиляцию
То есть, вы пришли за помощью но упорно от нее отказываетесь.
0
4 / 4 / 0
Регистрация: 07.03.2019
Сообщений: 249
12.11.2022, 16:48  [ТС]
Ок. Всем спасибо
0
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
12.11.2022, 18:31
Цитата Сообщение от Fershtein Посмотреть сообщение
Но я хочу сделать так, чтобы они вводились пользователем с помощью метода
А вы уверены, что поняли правильно задание?
"Должны вводиться пользователем с помощью метода" - это же совсем не означает, что консольный ввод должен быть внутри этого метода.
Так что вполне рабочий вариант, и совершенно не противоречащий заданию, - это делать как вам показали:
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
C++
1
2
3
4
int temp;
cout<<"input a->dlina: ";
cin>>temp;
a->setdl(temp);
Это нормальный, рабочий вариант, который выполнен в соответствии с основными принципами ООП, а также нисколько не противоречащий вашему заданию.
0
4 / 4 / 0
Регистрация: 07.03.2019
Сообщений: 249
12.11.2022, 18:33  [ТС]
DrOffset, Я уже так и делаю. Спасибо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.11.2022, 18:33

Разработайте согласно принципу разделения интерфейса и реализации, классы "Различные транспортные средства"
Пожалуйста... помогите... Разработайте согласно принципу разделения интерфейса и реализации, классы (не менее 5 классов), реализующие...

Разделение интерфейса программы
Добрый день. У меня такая проблема: Мне нужно разделить следующую программу на интерфейсы ( на раздельные файлы): pair.h fraction.h ...

Роблема в реализации интерфейса
import java.util.ArrayList; interface DoSomeThing { // интерфейс для того что бы менять местами 2 элемента Cell в массиве void...

Средства реализации интерфейса
Хотелось бы услышать Ваши мнения на тему: Большой проект (БД 150-200 форм, некоторые с весьма сложной бизнес-логикой), среда - как...

Отделение интерфейса от реализации
Задача была разделить интерфейс от реализации. линковщик g++ ругается на неопределение функций в классе, что происходит понять я не могу -...


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

Или воспользуйтесь поиском по форуму:
37
Ответ Создать тему
Новые блоги и статьи
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/ TL DR Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru