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

Наследование классов: почему производный класс не учитывает данные, введенные в базовом?

29.04.2017, 19:55. Показов 2923. Ответов 25

Студворк — интернет-сервис помощи студентам
Почему при компилляции производный класс не учитывает данные, введенные в базовом?
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
#include <iostream>
using namespace std;
//#include "Pai.h"
//#include "Rectangle.h"
class Pai{
    protected:
        int first;
        int second;
    public:
    
        
         void vod()
            {
                cout<<"Первое значение ";
                cin>>first;
            cout<<"Второе значение";
                cin>>second;
            }
            void umno()
            {
                cout<<"умножение: ";
                cout<<first*second<<endl;
            }
        
    
};
class Rectangle: public Pai{
    public:
        void Per()
        {
            cout<<first<<endl;
            cout<<second<<endl;
            cout<<"периметр: ";
            cout<<(2*(first * second))<<endl;
        }
        void Plo()
        {
            cout<<"площадь";
            cout<<first*second;
        }
};
int main()
{
    setlocale (LC_ALL, "rus");
    Pai P_object;
        P_object.vod();
        P_object.umno();
    Rectangle R_object;
        R_object.Per();
        R_object.Plo();
        
//  Rectangle R_object();
//      R_object.Per();
//  //  R_object.Plo();
        return 0;
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
29.04.2017, 19:55
Ответы с готовыми решениями:

Указатели в базовом классе на базовый класс и производный класс
Пишу контейнер &quot;Бинарное дерево поиска&quot; для частотного словаря. С самим контейнером особо вопросов нету. Вопрос по поводу элементов в...

Создание ссылки на производный класс в базовом классе
Доброго времени суток. Есть такой вопрос: &quot;Как обратиться к методам производного класса из базового?&quot; Если создать ссылку на...

Есть базовый и производный класс, в базовом определена функция, необходимо её объявить в производном!
Как-то так, что ли: class x { public: void f_0 (){}; }; class y: public x { public: //Тут у меня пойдёт...

25
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
06.05.2017, 01:56
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от osminog18 Посмотреть сообщение
т.е. получается методы изменения полей - это вызов конструктора, с вводимыми переменными,
В моей реализации да. Но можно сделать и отдельным методом. Тогда сразу после вызова конструктора всё будет заполнено чем-то "левым" или мусором.
Цитата Сообщение от osminog18 Посмотреть сообщение
просто получается я не поняла формулировку задания, т.к. думала, что это значит спрашивать пользователя удовлетворяют ли его значения переменны
А откуда они возьмутся? Чтобы спросить что-нибудь ненужное, нужно же сначала создать что-нибудь ненужное?
И опять фраза которую Вы не понимаете:
Цитата Сообщение от osminog18 Посмотреть сообщение
при этом чтобы значения переменных в базовом, передавалось в производный объекту.
Потому что её невозможно понять. Забудьте данное сочетание слов и почитайте о типах, переменных и потом о наследовании.
На пальцах - сказка на ночь:
Жил был трамвай. Это был простой вагон. Вернее, таких трамваев было много и их называли Тип-вагон. Каждый трамвай создавался на заводе по чертежу Тип-вагон и отправлялся по рельсам в огромный мир, который был покрашен не так как трамвай. Но это другая история.
Потом людям захотелось более вместительного транспорта. Инженеры - средоточие доброты, лени и здорового прагматизма, создали трамвай нового типа (на базе старого). Новый тип назвали: Тип-двойной вагон. Они просто пририсовали к Тип-вагон ещё один вагон и выпустили новый чертёж. Теперь на заводе, когда создавали новый трамвай, то сначала создавали старый а потом цепляли к нему ещё один вагон. Старый трамвай делали по старому.
Типы, это чертежи. Трамваи в металле, это экземпляры. Что должен передавать и кому новый трамвай? Он же состоит из старого + ещё кусок. Просто чтобы его создать, нужно сначала создать "старый", для этого по старому чертежу ведётся старый техпроцесс. Это запускается старый конструктор, вначале производства нового трамвая. Это делается для того чтобы создать "старую его часть". То есть переменная состоит из родителя и расширения. Читайте/читайте/читайте. Потом спрашивайте. Я буду бороться до последнего нерва.
1
0 / 0 / 1
Регистрация: 15.04.2017
Сообщений: 23
06.05.2017, 16:30  [ТС]
Еще немного Вас помучаю)
Смотрите, сейчас правильно?
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 <iostream>
using namespace std;
class Pai{
    protected:
        int first;
        int second;
    public:
        Pai(){}
        void vod()
        {
            cout<<"first ";
        cin>>first;
            cout<<"second ";
                cin>>second;
        }
            void umno()
            {
                cout<<first*second<<endl;
            }
            ~Pai(){};
        
    
};
class Rectangle: public Pai{
    public:
        Rectangle():Pai()
    {}
        void Per()
        {
            cout<<first;
            cout<<second<<endl;
            cout<<"Периметр: ";
            cout<<(2*(first + second))<<endl;
        }
        void Plo()
        {
            cout<<"Площадь: ";
            Pai::umno();
        }
};
int main()
{
    setlocale (LC_ALL, "rus");
    Pai P_object; 
    P_object.vod(); 
    cout<<"Умножение введенных чисел: ";     
        P_object.umno();
    Rectangle R_object;
    R_object.vod();
        R_object.Per();
        R_object.Plo();
        //cin.get();
        //cin.get();
        return 0;
}
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,430
06.05.2017, 16:39
Цитата Сообщение от osminog18 Посмотреть сообщение
C++
1
2
3
4
5
        void Plo()
        {
            cout<<"ÏëîùГ*äü: ";
            Pai::umno();
        }
Это лишнее. Объект наследника может напрямую вызывать Pai::umno().
1
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
06.05.2017, 16:43
Цитата Сообщение от osminog18 Посмотреть сообщение
Смотрите, сейчас правильно?
Оно работоспособно, но логически плохо. Если в конструкторе базового класса нет инициализации, то вызывать его в наследнике бессмысленно. В вашем случае, Иы всё равно вводите значения методом vod(). Если бы Вы вызывали его в конструкторе Pai (что такое Pai, кстати ?) то можно бы вызывать и конструктор в списке инициализации производного. Но тогда явный вызов vod в main не нужен будет. Ну то есть, ещё не видно, что Вы поняли порядок инициализации наследника.
0
 Аватар для dailydose
671 / 217 / 88
Регистрация: 21.07.2016
Сообщений: 1,036
Записей в блоге: 2
06.05.2017, 17:05
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
/*
*/
 
class Pai {
protected:
    int first;
    int second;
public:
    void vod()
    {
        std::cout << "Первое значение ";
        std::cin >> first;
        std::cout << "Второе значение";
        std::cin >> second;
    }
    void umno()
    {
        std::cout << "умножение: ";
        std::cout << first*second << std::endl;
    }
 
 
};
class myRectangle : public Pai {
public:
    myRectangle() {}
    myRectangle(const Pai& o) :Pai(o) {}
    void Per()
    {
        std::cout << first << std::endl;
        std::cout << second << std::endl;
        std::cout << "периметр: ";
        std::cout << (2 * (first * second)) << std::endl;
    }
    void Plo()
    {
        std::cout << "площадь";
        std::cout << first*second;
    }
};
int main()
{
    setlocale(LC_ALL, "rus");
    Pai P_object;
    P_object.vod();
    P_object.umno();
 
    myRectangle R_object(P_object);
    R_object.Per();
    R_object.Plo();
 
    //  Rectangle R_object();
    //      R_object.Per();
    //  //  R_object.Plo();
    std::cout << std::endl;
    return 0;
}
Первое значение 2
Второе значение3
умножение: 6
2
3
периметр: 12
площадь6
Для продолжения нажмите любую клавишу . . .
1
0 / 0 / 1
Регистрация: 15.04.2017
Сообщений: 23
06.05.2017, 18:40  [ТС]
А что такое "о" в скобочках?

Добавлено через 7 минут
Ну Вы ведь сами сказали, что можно сделать в функции, тем более у меня написано "Методы изменения полей"? Разве метод это не есть функция? Да, я ошиблась, у меня стандартный конструктор, поэтому нет смыслы его писать в производном, можно его убрать.
"Это лишнее. Объект наследника может напрямую вызывать Pai::umno()."- а вот эту фразу я не до конца поняла

Добавлено через 18 минут
я понимаю, что мы передаем по ссылке переменную o типа Pai, просто не понимаю, зачем она нужна и что она делает
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
06.05.2017, 18:40

Необходимо по инстанциировать производный класс по имени и запустить метод описанный в его базовом классе.
Есть несколько классов, наследованных от класса Parent. класс Parent содержит метод writeData. Производные классы его не переопределяют....

Один и тот же метод объявлен в базовом private, а в производном public; и по ссылке на производный класс он не вызывается!
Прежде всего, вот код который компилится и работает, он описан у Эккеля (глава 8 &quot;Полиморфизм&quot;): import static...

Наследование: базовый класс Квадрат, производный класс Пирамида
Помогите, пожалуйста!:cry: Добавлено через 6 минут Создать класс КВАДРАТ, член класса- длинна стороны. Предусмотреть в классе методы...

Наследование, указатель на производный класс
Указатель на тип базового класса при открытом наследовании может хранить адрес объекта производного класса. class num { ...

базовый и производный класс, в базовом объявлена переменная "protected", она недоступна по имени в производном классе! template <class T> воду мутит!
Друзья! Вот код #include &lt;stdio.h&gt; template &lt;class T&gt; class otets { protected: int peremennaya; }; template...


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

Или воспользуйтесь поиском по форуму:
26
Ответ Создать тему
Новые блоги и статьи
Установка ChatGPT (Codex) на Windows без использования Microsoft Store
Fabien159 28.10.2026
Здравствуйте всем читающим! Опишу процесс установки ChatGPT (Codex) на Windows, если по каким-то причинам у вас не получается устанавить его через Microsoft Store. И так: 1. Скачиваем с. . .
Программное добавление префикса в нумерацию документов
Maks 27.10.2026
Реализация из решения ниже выполнена в самописной конфигурации на БСП (помощь начинающему коллеге). Задача: Программно добавить префикс в нумерацию документов. Решение: В модуле объекта. . .
После закрытия оутлука продолжает висеть процесс в диспетчере задач
Maks 27.10.2026
С недавнего времени в продакшене возникла проблема: при закрытии оутлука в диспетчере задач продолжал висеть процесс outlook. exe. Проблема возникла после установки MS Office 2021 LTSC на машинах, под. . .
Baragoz - DPS/HPS бот для WoW 3.3.5a, многоязычный
AmbA 26.10.2026
Хотите ещё ботов? У меня есть один! А я пока отдохну от него. https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=12062&stc=1&d=1793007952 Инструкция внутри. https:/ / youtu. be/ VpfFZSUDGnQ. . .
Особенности gif сгенерированных в Си
russiannick 21.10.2026
Рассмотрим генерацию gif файлов, которые в Си имеют свои особенности. Gif представляет собой графический формат популярный в интернете. Посмотрим на палитру. Gif файл сгенерированный в си отличается. . .
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 Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru