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

Как передать записанные значение базового класса в дочерний класс

15.11.2021, 20:17. Показов 3244. Ответов 50

Студворк — интернет-сервис помощи студентам
Проблема заключается в том, что я не понимаю, как передать значения базового класса в дочерний. Нужно передать значение a, базового класса в дочерний, чтоб в последствии посчитать периметр.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 rectangle.h
#pragma once
 
class rectangle
{
protected:
    float a, b;
public:
    rectangle(void);
    ~rectangle(void);
    rectangle(float, float);
    float PerimRect() {
        return 2.0 * (a + b);
    }
    void input();
};
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 rectangle.cpp
#include "rectangle.h"
#include <iostream>
#include <math.h>
 
using namespace std;
 
rectangle::rectangle(void) : a(0), b(0) {}
 
rectangle::rectangle(float A, float B) : a(A), b(B) {}
 
rectangle::~rectangle(void) {}
 
void rectangle::input() {
    cout << "Input a side - > ";
    cin >> a;
    cout << "Input b side - > ";
    cin >> b;
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 square.h
#pragma once
#include "rectangle.h"
 
class square :
    public rectangle
{
public:
    square(void);
    ~square(void);
    float PerimSqr() {
        return 4.0 * a;
    }
};
C++
1
2
3
4
5
6
7
8
9
 square.cpp
#include "square.h"
#include <iostream>
 
using namespace std;
 
square::square() : rectangle(a, b) {}
 
square::~square(void) {}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 reshenie.cpp
#include "rectangle.h"
#include "square.h"
#include <iostream>
 
using namespace std;
 
int main() {
    rectangle reshenobj;
    square reshobj;
    reshenobj.input();
    //reshobj.input();
    cout << "Perimeter of Rectangle - > " << reshenobj.PerimRect() << endl;
    cout << "Perimeter of Square - > " << reshobj.PerimSqr() << endl;
    if (reshenobj.PerimRect() > reshobj.PerimSqr()) {
        cout << "Perimeter of Rectangle more bigger than Square";
    }
    else {
        cout << "Perimeter of Square more bigger than Rectangle";
    }
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
15.11.2021, 20:17
Ответы с готовыми решениями:

Передать значение из базового класса в класс наследник
Добрый день, надо передать choice из одного класса в другой #include &lt;iostream&gt; #include&lt;string&gt; using namespace std; ...

Как передать значение переменной из класса в класс?
Здравствуйте. Я бы хотел в этой программе передать значение TOTAL_PSU в другой класс, чтобы произвести сравнение значений в функции...

Зачем переменной типа базового класса инициализировать дочерний?
Есть такой код, для примера: using System; namespace ConsoleApplication1 { abstract class TableFun { public...

50
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
15.11.2021, 22:04
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Fradid Посмотреть сообщение
vlisp, немного ошибся, там папа должен быть Прямоугольник
Базовый тот кто более абстрактный/общий.
Прямоугольник может быть квадратом ?
А квадрат может быть прямоугольником ?
В чем разница ?
Разница в том что стороны квадрата всегда равны.
То есть Квадрат всегда - прямоугольник, прямоугольник не всегда квадрат.
Базовый - прямоугольник, квадрат имеет больше ограничений, чем прямоугольник.

Добавлено через 41 секунду
vlisp, хорош троллить
1
1 / 1 / 0
Регистрация: 29.04.2021
Сообщений: 19
15.11.2021, 22:06  [ТС]
Я вас прекрасно понимаю, но это не я создавал задание, а преподаватель, так что все вопросы к нему)) А так всем спасибо за советы и за помощь, очень мне помогли)
0
 Аватар для Kuzia domovenok
4268 / 3328 / 926
Регистрация: 25.03.2012
Сообщений: 12,545
Записей в блоге: 1
15.11.2021, 22:11
vlisp, да с чего ты вообще это взял "как правильно наследовать"???

Наследник должен работать во всех случаях, где мог работать родительский класс!
Не должен меняться интерфейс базового класса при создании наследника.
Представь, что у квадрата существовала функция "вписать окружность".
Если ты унаследуешь от него прямоугольник, у которого не может быть такой функции, т.к. прямоугольник не обладает свойствами квадрата, ты порушишь изначальный интерфейс!

Пойми ты, наследование это впервую очередь про общий интерфейс, а не про то, "кому какие поля добавляются... где их меньше - тот и базовый"
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
15.11.2021, 22:12
Fradid, гнать на преподавателя - любимая фишка форумчан.
Стрелочка могла быть ошибочная, любой адекватный учитель поощряет здравый смысл. (как минимум не наказывает за это)
В новых учебниках и методичках их (ошибок) намного больше чем раньше.
Потому что делаются абы как и наскоро, и еще и копейки за эту работу платят.
1
 Аватар для Kuzia domovenok
4268 / 3328 / 926
Регистрация: 25.03.2012
Сообщений: 12,545
Записей в блоге: 1
15.11.2021, 22:12
Цитата Сообщение от SmallEvil Посмотреть сообщение
хорош троллить
он не троллит, он на полном серьёзе не понимает.
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
15.11.2021, 22:15
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Пойми ты, наследование это впервую очередь про общий интерфейс, а не про то, "кому какие поля добавляются... где их меньше - тот и базовый"
___

Добавлено через 21 секунду
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
он не троллит, он на полном серьёзе не понимает.
может показалось
0
 Аватар для vlisp
1071 / 992 / 153
Регистрация: 10.08.2015
Сообщений: 5,443
15.11.2021, 22:24
Цитата Сообщение от SmallEvil Посмотреть сообщение
Базовый - прямоугольник, квадрат имеет больше ограничений, чем прямоугольник.
глупости, исковерканная логика, сам этим когда-то страдал. почитай постулаты ООП, сильно отрезвляет
суть ооп не в ограничениях, а в возможностях.
нет смысла наследовать квадрат от прямоугольника, так как он уже имеет все достаточно полей. ты просто создаешь прямоугольник с равными сторонами без всяких определений квадрата. он даже тебе верно посчитает периметр.
а вот наоборот все плохо. при наследовании тебе нужно добавить еще одну сторону и переопределить метод подсчета периметра но преимущество в том что тебе не нужно объявлять аж одну переменную. Вот такое задание уже имеет смысл для понимания как работает ООП

Добавлено через 5 минут
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
про общий интерфейс
а где в с++ интерфейсы? кто мешает наследовать от квадрата квадрат с вписанной окружностью?
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
15.11.2021, 22:34
Цитата Сообщение от vlisp Посмотреть сообщение
глупости, исковерканная логика, сам этим когда-то страдал.
что ж, подождем пока вы столкнетесь с настоящей работой, и будете от своих текущих взглядов отталкиваться

Добавлено через 59 секунд
Цитата Сообщение от vlisp Посмотреть сообщение
а вот наоборот все плохо. при наследовании тебе нужно добавить еще одну сторону и переопределить метод
Вы видели пример от Алексея ? Где там новая переменная ? где переопределение методов ?

Добавлено через 1 минуту
Цитата Сообщение от vlisp Посмотреть сообщение
а где в с++ интерфейсы?
C++
1
2
3
4
class interface{
   virtual void DoIt() =0;
   ~interface(){};
}
0
 Аватар для vlisp
1071 / 992 / 153
Регистрация: 10.08.2015
Сообщений: 5,443
15.11.2021, 22:41
зачем интерфейсу деструктор, если у него и переменных-то нет
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
15.11.2021, 22:49
Цитата Сообщение от vlisp Посмотреть сообщение
зачем интерфейсу деструктор, если у него и переменных-то нет
ну вот мы все и выяснили ))
0
 Аватар для vlisp
1071 / 992 / 153
Регистрация: 10.08.2015
Сообщений: 5,443
15.11.2021, 22:54
Цитата Сообщение от SmallEvil Посмотреть сообщение
Вы видели пример от Алексея ? Где там новая переменная ?
вот я про это и говорю
вместо определения аж целого класса можно было
C++
1
Rectangle sq{a,a};
потому что да, по сути квадрат - это прямогольник, но ооп так не работает, потому что сколько занимает инт? а если таких квадратов миллион или миллиард? а если таких полей не 1, а 100, а еще там динамические массивы нужно инициализировать в предке и ли стучаться в чужой домен и т.д а в наследнике этого не надо
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
15.11.2021, 22:59
Цитата Сообщение от vlisp Посмотреть сообщение
и т.д а в наследнике этого не надо
тогда это новый класс, и точка.

Добавлено через 1 минуту
но если у базового куча методов, куча таких же наследников которых можна использовать как прямоугольники, и ваш "новый" класс выпадет из этого множества, вы многое потеряете, из-за одной переменной....

Добавлено через 2 минуты
Цитата Сообщение от vlisp Посмотреть сообщение
но ооп так не работает
ООП работает так как позволяет ЯП (язык программирования), а дальше все зависит только от программиста.
0
 Аватар для vlisp
1071 / 992 / 153
Регистрация: 10.08.2015
Сообщений: 5,443
15.11.2021, 23:03
вот я в прямоугольнике придумаю метод нахождения соотношения сторон и будет он болтаться в квадрате не имея смысла никакого, или новый клас придумаете?

Добавлено через 1 минуту
смысл ооп не писать по два раза по два раза одно и то же одно и то же. гляньте иерархию классов в том же делфи или билдере.
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
15.11.2021, 23:07
Цитата Сообщение от vlisp Посмотреть сообщение
вот я в прямоугольнике придумаю метод нахождения соотношения сторон и будет он болтаться в квадрате не имея смысла никакого, или новый клас придумаете?
Почему будет болтаться ? Для квадрата он не нужен что ли ?
У меня есть набор из квадратов прямоугольников, и вычурных прямоугольников, с двойным дном.
Для всех них он нужен, так как они кроме своей сущности, квадрата и т.п унаследованны и из прямоугольника.

Добавлено через 59 секунд
Цитата Сообщение от vlisp Посмотреть сообщение
в том же делфи
0
 Аватар для vlisp
1071 / 992 / 153
Регистрация: 10.08.2015
Сообщений: 5,443
15.11.2021, 23:07
Цитата Сообщение от SmallEvil Посмотреть сообщение
Для квадрата он не нужен что ли ?
сам как думаешь?
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
15.11.2021, 23:10
Цитата Сообщение от vlisp Посмотреть сообщение
сам как думаешь?
думаю что нужен, просто соотношение будет всегда равно 1
и ? если я наши квадраты рассматриваю только как прямоугольники, этот метод - НУЖЕН.
Я понял что

Добавлено через 49 секунд
vlisp, видно вы не в курсе что такое полиморфизм, и для чего вообще ООП.
0
 Аватар для vlisp
1071 / 992 / 153
Регистрация: 10.08.2015
Сообщений: 5,443
15.11.2021, 23:15
Цитата Сообщение от SmallEvil Посмотреть сообщение
думаю что нужен
конечно нужен, сидеть в памяти и возвращать всегда одно и то же, хотя нет, скорей всего компилятор его выпилит за ненадобностью

Цитата Сообщение от SmallEvil Посмотреть сообщение
что такое полиморфизм
а зачем полиморфизм если можно воспользоваться методом, который уже написан? вот как раз наоборот - это про полиморфизм
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
15.11.2021, 23:41
Лучший ответ Сообщение было отмечено Kuzia domovenok как решение

Решение

vlisp, раз вас теория не туда-сюда, вот пример :
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
#include <iostream>
#include <vector>
#include <memory>
using namespace std;
struct Rectangle{
    int a{},b{};
    int area(){return a*b;};
    Rectangle(int a, int b):a{a},b{b}{}
    double SidesRatio(){ return max(a,b)/min(a,b);}
    virtual void Print(){cout<<a<<' '<<b;};
    virtual ~Rectangle(){}
};
struct Square : public Rectangle{
    Square(int a):Rectangle{a,a}{}
    virtual void Print(){cout<<a;};
    virtual ~Square(){}
};
int main()
{
    vector<unique_ptr<Rectangle>> all_figure;
    all_figure.emplace_back(make_unique<Rectangle>(2,6));
    all_figure.emplace_back(make_unique<Square>(2));
    for(auto & f : all_figure){
        cout << "area = " << f->area() << endl;
        cout << "SidesRatio = " << f->SidesRatio() << endl;
        f->Print();
        cout << endl << endl;
    }
    return 0;
}
0
 Аватар для vlisp
1071 / 992 / 153
Регистрация: 10.08.2015
Сообщений: 5,443
15.11.2021, 23:52
вижу кроме хамства тут ничем не пахнет, так что не вижу смысла продолжать
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
16.11.2021, 00:03
vlisp, это я так кодом нахамил ? )

Добавлено через 1 минуту
vlisp, перепишите мой код с обратным наследованием, просто хочу посмотреть !
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
16.11.2021, 00:03

Как передать 2 из 3-х значений конструктора в дочерний класс?
#include &lt;iostream&gt; #include &lt;string&gt; #include &quot;math.h&quot; using namespace std; class Uravnenie //Базовый класс { public: ...

Как передать значение переменной из класса Program в свой созданный класс?
Нужно передать значение вводимой в консоли переменной в класс, который сам создал Как это можно сделать?

Как создать динамический массив объектов базового класса и заполнить его наследниками базового класса?
#include &lt;iostream&gt; using namespace std; class P { int p; public: P() {

Нужно передать значение из класса в класс
import sys from PyQt5 import QtWidgets, QtGui class Win2(QtWidgets.QMainWindow): # Основной класс интерфейса def...

Класс: Создать на основе базового класса Car три класса-автомобиля: Тойота, Феррари, Бугатти.
Всем привет! На днях дали эту задачу, пытался делать по-разному не хоть убей не могу сделать. К сожалению я пропустил пары по классам. А по...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru