Форум программистов, компьютерный форум, киберфорум
C++
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
1 / 1 / 0
Регистрация: 25.11.2017
Сообщений: 37
1

Конструкторы и поля

15.10.2019, 03:40. Показов 1232. Ответов 8

Зравствуйте, что-то не могу сообразить какие параметры или какие методы, поля использовать с этой задачей, нужно ли создавать отдельный header-файл для производного класса и т.п. В голове просто каша. Только сегодня объясняли, как обычно галопом по европе. Есть небольшое понимание того как работают геттеры и сеттеры, но на C#. А тут надо на C++. Описание задачи в коде. Спасибо за внимание и понимание.
Код ниже:
Кликните здесь для просмотра всего текста
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
/*Создать класс квадрат, поле класса – длина стороны. Предусмотреть в классе методы вычисления и вывода 
сведений о фигуре – периметр, площадь, диагональ. Создать производный класс – куб, добавить в класс метод 
определения объема фигуры, перегрузить методы расчета площади и вывода сведений о фигуре.*/
 
# include <math.h>
# include <iostream>
using namespace std;
 
class Square
{
protected:
    double side = 0;        // длина стороны
    double perimeter = 0;   // периметр
    double area = 0;        // площадь
    double diagonal = 0;    // диагональ
    double volume = 0;      // объем
 
public:
    void Set(double _side , double _perimeter, double _area, double _diagonal, double _volume)
    {
        side = _side;
        perimeter = _perimeter;
        area = _area;
        diagonal = _diagonal;
        volume = _volume;
    }
 
    double getPerimeter(double side)
    {
        double perimeter = 4 * side;
        cout << "The perimeter = " << perimeter;
    }
    double getArea()
    {
        double area = side * side;
        cout << "The area = " << area;
    }
    double getDiagonal()
    {
        double diagonal = side * sqrt(2);
        cout << "The diagonal = " << diagonal;
 
    }
};
 
class Cube : Square
{
    double getVolume()
    {
        double volume = volume * volume * volume;
        cout << "The volume = " << volume;
    }
    double calculateArea(double side)
    {
        double area = side * side * side;
        cout << "The area of cube = " << area;
    }
};
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.10.2019, 03:40
Ответы с готовыми решениями:

Классы - поля, конструкторы, свойства
Должны присутствовать: - конструктор - методы задания (с контролем правильности) и чтения полей...

Поля, константы, конструкторы, свойства
Всем доброго дня))))) немогли бы вы помочь с данной задачей :Составить описание класса многочлена...

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

Необходимо создать класс, содержащий по возможности все его виды элементов: поля, конструкторы, свойства
Помогите пожалуйста=) для вот это программы нужно создать класс, содержащий по возможности все его...

8
813 / 500 / 211
Регистрация: 19.01.2019
Сообщений: 1,196
15.10.2019, 10:55 2
Лучший ответ Сообщение было отмечено emulzone как решение

Решение

emulzone, Может так:
Кликните здесь для просмотра всего текста

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
#include <iostream>
 
class Square
{
protected:
    double edge;    // длина стороны
 
public:
    virtual ~Square() = default;
 
    Square() = delete;
 
    Square(const double& size) :
        edge(size)
    {}
 
 
    const double edgeSize() const {
        return edge;
    }
 
    double perimeter() {
        return edge * 4;
    }
 
    double area() {
        return edge * edge;
    }
 
    double diagonal() {
        return edge * sqrt(2);
    }
};
 
class Cube : public Square
{
 
 
public:
    ~Cube() = default;
 
    Cube() = delete;
 
    Cube(const double& size) : Square(size)
    {}
 
 
    double volume() {
        return edge * edge * edge;
    }
 
    double area() {
        return edge * edge * 6;
    }
 
    double perimeter() {
        return edge * 12;
    }
 
    double diagonal() {
        return edge * sqrt(3);
    }
};
 
 
int main(int argc, char** argv)
{
    {
        Square sq(5.5);
        std::cout << "Square:"
            << '\n' << "Edge = " << sq.edgeSize()
            << '\n' << "Area = " << sq.area()
            << '\n' << "Perimeter = " << sq.perimeter()
            << '\n' << "Diagonal  = " << sq.diagonal()
            << "\n\n";
 
        Cube cu(1.1);
        std::cout << "Cube:"
            << '\n' << "Edge = " << cu.edgeSize()
            << '\n' << "Area = " << cu.area()
            << '\n' << "Perimeter = " << cu.perimeter()
            << '\n' << "Diagonal  = " << cu.diagonal();
    }
 
    return 0;
}
1
║XLR8║
1210 / 912 / 270
Регистрация: 25.07.2009
Сообщений: 4,371
Записей в блоге: 5
15.10.2019, 11:34 3
emulzone, я уже думал поиздеваться над очередным "сделайте за меня".

Цитата Сообщение от emulzone Посмотреть сообщение
double perimeter = 0; * // периметр
* * double area = 0;* * * * // площадь
* * double diagonal = 0;* * // диагональ
* * double volume = 0;* * * // объем
Вот это всё вычисляемые значения (формула) хранить их есть смысл только если у вас множественные вызовы, но тогда надо хранить переменную отвечающую за то что эти сохранённые вычисленные значения всё ещё актуальны. Т.е. каждый раз когда меняется сторона - надо для каждого сохранённого значения обнулить флаг, чтобы мы не отдавали сохранённое значение а перевычислили его.

Цитата Сообщение от emulzone Посмотреть сообщение
double getPerimeter(double side)
Его надо делать виртуальным, чтобы перегрузить позже, как сказано в условии задачи.

Цитата Сообщение от emulzone Посмотреть сообщение
нужно ли создавать отдельный header-файл для производного класса
В условии задачи ничего не сказано.

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
/**
 * Создать класс квадрат, поле класса – длина стороны. 
 * Предусмотреть в классе методы вычисления и вывода сведений о фигуре – периметр, площадь, диагональ. 
 * Создать производный класс – куб, добавить в класс метод определения объема фигуры, 
 *         перегрузить методы расчета площади и вывода сведений о фигуре.
 */
 
#include <cmath>
#include <iostream>
#include <string>
 
class Square
{
protected:
  virtual std::string get_name();
  double side = 0;        // длина стороны
 
public:
  Square() = delete;
  Square(double _side) : side(_side) { }
  virtual double get_perimeter();
  virtual double get_area();
  virtual double get_diagonal();
  void show_perimeter();
  void show_area();
  void show_diagonal();
};
 
class Cube : public Square
{
protected:
  virtual std::string get_name() override;
 
public:
  Cube() = delete;
  Cube(double _side) : Square(_side) { }
  virtual double get_perimeter() override;
  virtual double get_area() override;
  virtual double get_diagonal() override;
  double get_volume();
  void show_volume();
};
 
std::string Square::get_name() { return "square"; }
 
double Square::get_perimeter() { return side * 4; }
// ...
 
void Square::show_perimeter() { std::cout << "Perimeter of the " << get_name() << ": " << get_perimeter() << std::endl; }
// ...
 
std::string Cube::get_name() { return "cube"; }
 
double Cube::get_perimeter() { return side * 12; }
// ...
Осталось доделать до конца. show_* методы используют 2 виртуальных метода чтобы уменьшить количество перегрузок, но можно и руками заняться copy\paste-ом.

Добавлено через 6 минут
emulzone, я деструктор виртуальным не сделал, а nalbe666 сделал. В моём случае это потенциальное UB https://www.geeksforgeeks.org/virtual-destructor/
0
58 / 43 / 17
Регистрация: 12.08.2019
Сообщений: 161
15.10.2019, 11:36 4
outoftime,
разрешите вопрос , а зачем было делать конструктор удаленным ?
Цитата Сообщение от outoftime Посмотреть сообщение
C++
1
Cube() = delete;
0
║XLR8║
1210 / 912 / 270
Регистрация: 25.07.2009
Сообщений: 4,371
Записей в блоге: 5
15.10.2019, 11:56 5
QuestionAnd, https://en.cppreference.com/w/... onstructor
Deleted implicitly-declared default constructor
...
T has a direct or virtual base which has a deleted default constructor, or it is ambiguous or inaccessible from this constructor.
Вы правы, достаточно для базового класса прописать.
0
58 / 43 / 17
Регистрация: 12.08.2019
Сообщений: 161
15.10.2019, 12:02 6
outoftime, не -не , я не прав , хотел только уточнить ..
спасибо.
0
1 / 1 / 0
Регистрация: 25.11.2017
Сообщений: 37
15.10.2019, 12:58  [ТС] 7
Спасибо! Сейчас буду разбираться, что к чему.
0
║XLR8║
1210 / 912 / 270
Регистрация: 25.07.2009
Сообщений: 4,371
Записей в блоге: 5
15.10.2019, 14:14 8
Цитата Сообщение от QuestionAnd Посмотреть сообщение
а зачем было делать конструктор удаленным ?
Чтобы никто не смог создать класс куб\квадрат без стороны (не инициализированный).
1
║XLR8║
1210 / 912 / 270
Регистрация: 25.07.2009
Сообщений: 4,371
Записей в блоге: 5
16.10.2019, 04:42 9
QuestionAnd, emulzone, да, в C++17 всё же можно будет создать объект с помощь агрегатов

https://www.youtube.com/watch?... 04&t=1729s
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.10.2019, 04:42

Webpack собирает проект, а приложение говорит что мои конструкторы не конструкторы
Помогите пожалуйста, в едином файле (не билде) всё работает хорошо, как только начинаю отделять...

Определите класс матриц. Напишите перегруженные конструкторы для создания одномерной и двумерной матриц. В конструкторы передаются размерности матриц
Доброго времени суток всем) Извините если не в том разделе) Не могу понять как решить данную...

Конструкторы базовых классов ("Производный класс не наследует конструкторы базовых классов")
Как следует понимать выражение &quot;Производный класс не наследует конструкторы базовых классов&quot;, если...

Найти работу поля, разность потенциалов на концах участка, напряженность поля, объемную плотность энергии поля
Электрон разгоняется однородным полем на участке 10^(-2) см до скорости 4×10^6 м/с. Найти:...


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

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

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