Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 09.12.2021
Сообщений: 81

Как создать массив указателей на объекты базового класса, которым присвоить адреса объектов производных классов?

13.04.2022, 18:08. Показов 445. Ответов 4

Студворк — интернет-сервис помощи студентам
Я вас категорически приветствую!)

НА повестке дня вот такая задача по наследованию: "Создать базовый класс ПЕЧАТНАЯ ПРОДУКЦИЯ (задаются название, количество страниц). Создать производные классы КНИГА (задаются данные об авторе, размере страницы, количестве экземпляров) и ЖУРНАЛ (задаются размер страницы, количество экземпляров, периодичность выхода). Для введенных данных о печатной продукции вычислить расходы бумаги (в кв. м.) – для каждого примера и суммарные, отсортировать эти примеры по убыванию издержек. Для проверки использовать массив указателей на объекты базового класса, которым присвоить адрес объектов производных классов."

Два вопроса:

1)Как присвоить адрес объектов производных классов, указателям из массива базового класса(последнее предложение в задании если не понятно объяснил).

2)Как реализовать ввод и вывод всех необходимых мне данных

Так же допускается критика и замечания в адрес уже имеющегося кода.
Всем заранее большое спасибо за помощь))

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
#include <iostream>
#include <string>
 
using namespace std;
 
class DRUK
{
protected:
    string m_name;
    int m_pages;
public:
    DRUK(const string& name = "", double _pages = 0) : m_pages(_pages), m_name(name)
    {
 
    }
    const string& getName() const
    {
        return m_name;
    }
    int getPages() const
    {
        return m_pages;
    }
 
    virtual const string& returnWinner() const = 0;
 
    virtual char typeOfProduction() = 0;
 
    virtual void print()const
    {
        cout << "Название: " << m_name << "\n";
        cout << "Кол-во стораниц: " << m_pages << "\n";
    }
};
 
class BOOK : public DRUK
{
private:
    string m_author;
    int m_sizeofPages;
    int m_countofPrimir;
public:
    BOOK(const string& name = "", double _pages = 0,
        const string& author = "", double size = 0, double primir = 0)
        : DRUK(name, _pages), m_author(author), m_sizeofPages(size), m_countofPrimir(primir)
    {
 
    };
    const string& getAuthor() const{return m_author;}
    int getSize() const{return m_sizeofPages;}
    int getСount() const{return m_countofPrimir;}
 
    virtual void print()const override
    {
        DRUK::print();
        cout << "Автор: " << m_author << "\n" <<
                "Розмер страниц: " << m_sizeofPages << "\n" <<
                "Кол-во экземпляров: " << m_countofPrimir << "\n";
    }
};
 
class JURNAL : public DRUK
{
private:
    int m_SizeOfPages;
    int m_CountOfPrimir;
    int m_period;
public:
    JURNAL(const string& name = "", double _pages = 0,
        double _size = 0, double _primir = 0, double _period = 0)
        : DRUK(name, _pages), m_SizeOfPages(_size), m_CountOfPrimir(_primir), m_period(_period)
    {
 
    };
    
    int getSizeOfPages() const { return m_SizeOfPages; }
    int getCountOfPrimir() const { return m_CountOfPrimir; }
    int getPeriod() const { return m_period; }
 
    virtual void print()const override
    {
        DRUK::print();
        cout << "Розмер страниц: " << m_SizeOfPages << "\n" <<
                "Кол-во экземпляров: " << m_CountOfPrimir << "\n" <<
                "Период вихода: " << m_period << "\n";
    }
};
 
const ostream& operator<< (ostream& out, const DRUK& universiade)
{
    universiade.print();
    return out;
}
 
int main() {
 
    system("chcp 1251");
    int count;
    cout << "Введите кол-во печатной продукции: \n";
    cin >> count;
    DRUK** totalDRUK = new DRUK*[count];
 
    for (int i = 0; i < count; ++i) {
        std::cout << "Item number " << i + 1 << " is a (1. BOOK/ 2. JURNAL): ";
        char choise;
        std::cin >> choise;
        switch (choise)
        {
        case '1': totalDRUK[i] = new BOOK; break;
        case '2': totalDRUK[i] = new JURNAL; break;
        default:
            --i;
            cout << "Invalid choise!" << std::endl;
            break;
        }
    }
    return 0;
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
13.04.2022, 18:08
Ответы с готовыми решениями:

Занести из файла объекты производных классов в массив объектов базового класса
Здравствуйте. Что в этом коде изменить, чтобы объекты производных классов заносились из файла? using System; namespace...

Создать массив указателей базового класса и присвоить ему адреса каждого из екземпляров класса
Всем привет. Есть условие задачи: Дан базовый класс Base у которого есть метод my_name, метод выводит сообщение This is Base class. От...

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

4
404 / 261 / 168
Регистрация: 13.01.2021
Сообщений: 1,162
13.04.2022, 18:25
Retr0Hacker, сразу отвечу, зачем вы сделали Класс DRUK абстрактным? Из-за этого вы не сможете сделать массив указателей на обьект базового класса.
0
Гвоздь Задиров
 Аватар для Folian
1718 / 1117 / 337
Регистрация: 25.01.2019
Сообщений: 2,940
13.04.2022, 18:45
Цитата Сообщение от kirigaua Посмотреть сообщение
Из-за этого вы не сможете сделать массив указателей на обьект базового класса

Нельзя создать объект абстрактного класса, указателей хоть обсоздавайся.

Добавлено через 6 минут
Цитата Сообщение от Retr0Hacker Посмотреть сообщение
1)Как присвоить адрес объектов производных классов, указателям из массива базового класса
У тебя ж это вроде сделано, об чём вопрос?

Добавлено через 5 минут
А, ну дык у тебя в потомках нет определения чистых виртуалок базового.
0
0 / 0 / 0
Регистрация: 09.12.2021
Сообщений: 81
13.04.2022, 18:49  [ТС]
У тебя ж это вроде сделано, об чём вопрос?
Агааа, ясно видимо не до конца понял что сдела, хихихих))

2)Как реализовать ввод и вывод всех необходимых мне данных
Можете ещё подсказать как быть с этим. Ну то есть, вот вывод кода в main():
https://www.cyberforum.ru/atta... 1649864720

По моей задумке после этого должны вводится данные:
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
class DRUK
{
    virtual void print()const
    {
        cout << "Название: " << m_name << "\n";
        cout << "Кол-во стораниц: " << m_pages << "\n";
    }
};
 
class BOOK : public DRUK
{
  DRUK(name, _pages), m_author(author), m_sizeofPages(size), m_countofPrimir(primir)
    {
 
    };
    const string& getAuthor() const{return m_author;}
    int getSize() const{return m_sizeofPages;}
    int getСount() const{return m_countofPrimir;}
 
    virtual void print()const override
    {
        DRUK::print();
        cout << "Автор: " << m_author << "\n" <<
                "Розмер страниц: " << m_sizeofPages << "\n" <<
                "Кол-во экземпляров: " << m_countofPrimir << "\n";
    }
};
 
class JURNAL : public DRUK
{
        DRUK::print();
        cout << "Розмер страниц: " << m_SizeOfPages << "\n" <<
                "Кол-во экземпляров: " << m_CountOfPrimir << "\n" <<
                "Период вихода: " << m_period << "\n";
    }
};
Вот как сделать ввод и потом вывод этих даных?
Миниатюры
Как создать массив указателей на объекты базового класса, которым присвоить адреса объектов производных классов?  
0
404 / 261 / 168
Регистрация: 13.01.2021
Сообщений: 1,162
13.04.2022, 19:02
Folian, ты прав, пойду лучше чем-то другим займусь. Помимо этого там ещё функция была названа русской буквой.

Добавлено через 1 минуту
Retr0Hacker, попробуй через конструкторы классов и вывод через виртуальную функцию.

Добавлено через 9 минут
Через виртуальные функции можешь все сделать.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
13.04.2022, 19:02
Помогаю со студенческими работами здесь

Абстрактный класс, массив указателей на объекты производных классов
У меня есть абстрактный класс: class abstract{ public: int field; double method(); }; В нем объявлены поле и метод. Далее...

Как создать массив указателей на объекты класса
Задача состоит в создании многофайлового проекта. Каждый класс находится в отдельном файле. В файле main.cpp нужно создать массив...

Почему в сортировке указателей на объекты в вызове функции используются адреса объектов, а не указателей?
Доброго времени суток! Рассматриваю пример (из Лафоре) сортировки массива указателей на объекты, для чего используются указатели на...

Создать массив указателей на тип базового класса
Только начала учить ООП. И тут такое задание:при хранении объектов иерархии, хранить их как массив указателей на тип базового класса. ...

Сортировка: Как отсортировать объекты конечных классов с учетом промежуточного базового класса?
Есть один базовый класс (ClassMain), который наследует три класса (N1 N2 N3), каждый из трех наследников наследует еще по два (N11, N12,...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru