Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ В каждом столбце матрицы найти среднее арифметическое элементов и определить номер столбца с максимальным средним https://www.cyberforum.ru/ cpp-beginners/ thread2565154.html
Составить программу на языке С++, для решения поставленной задачи. Использовать статические массивы. Для ввода элементов массива использовать поток cin, для вывода результатов – cout. В каждом...
C++ Разложение без рекурсии!
Вот сижу я такой и думая над одной задачкой замечаю одну закономерность в разложении чисел которая описана в нижеприведённом коде(С++).Я делаю подарочек Киберфоруму в виде этого кода.С наступившим...
Признаки деления шестнадцатеричных чисел на 10 C++
У меня такая задача: на вход подаются шестнадцатеричные числа. Необходимо сначала найти все варианты расстановок символов этого 16-го числа, а после этого выбрать те, которые делятся на 10 и...
C++ Вычислить среднее геометрическое введенных числел Переписать с Па на С++ Program kod; var a,d:real; var i,k:integer; begin k:= 0; i:= 0; d:= 1; writeln('Введите три действительных числа: '); repeat https://www.cyberforum.ru/ cpp-beginners/ thread2565035.html
C++ Программа CRISIS выдающая информацию о сумме сбережений https://www.cyberforum.ru/ cpp-beginners/ thread2565034.html
Задание. Напишите программу CRISIS, что за информацией о сумме сбережений Петра на мои мент начала кризиса в Олимп и колебания курса олимпов относительно галактов определит максималь ное...
C++ Нейросеть с рандомным исправлением коэффициентов
Помогите допилить код, а то начал оптимизировать в итоге хожу по граблям. У меня уже глаз замылился. Посмотрите пожалуйста в отладчике, что там происходит, а то у меня на линуксе отадчик не...
C++ Ругается на string
Здравствуйте подскажите пожалуйста посмотрел на код, но почему то в 19 версии он ругается на string, хотя вроде все правильно написано.(класс семья, фио,год,дети ничего сложного) это main.cpp ...
C++ void main() ошибка #include <iostream> using namespace std; void main /* Проблема в нем () */ { setlocale (LC_ALL, "rus"); int a; cin >> a; switch (a) https://www.cyberforum.ru/ cpp-beginners/ thread2565020.html
C++ Класс "Список", не работает вывод с хвоста https://www.cyberforum.ru/ cpp-beginners/ thread2565007.html
не работает вывод с хвоста #include<iostream> #include<cstdlib> using namespace std; namespace vlados { template<class ITEM>
C++ В чем плох этот код? Всем привет, давно меня тут не было, но сразу к делу... Есть вот такой проект, выполненный как тестовое задание на стажировку, в которой мне отказали в достаточно грубой форме без объяснения причин,... https://www.cyberforum.ru/ cpp-beginners/ thread2565005.html
5 / 5 / 0
Регистрация: 04.03.2015
Сообщений: 71
0

Передача объектов дочерних классов через массив объектов родительского класса в функцию

04.01.2020, 16:44. Просмотров 3006. Ответов 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
#include <iostream>
 
using namespace std;
 
class GeomObject
{
 
};
 
class Circle: public GeomObject
{
public:
    int radius = 2;
};
 
class Line: public GeomObject
{
public:
    int length = 3;
};
 
void foo(GeomObject *arr, int n)
{
    for (int i = 0; i < n; i++)
    {
//Как правильно реализовать код ниже?
//        if (arr[i] is Circle)
//            print radius 
//        else if (arr[i] is Line)
//            print lenght
    }
}
 
int main()
{
    GeomObject arr[2];
    arr[0] = Circle();
    arr[1] = Line();
 
    foo(arr, 2);
    
    return 0;
}
Вопрос состоит в том, как правильно реализовать такой код. Возможно, я вообще неверно использую наследование и такой код в теории некорректен, тогда, пожалуйста, объясните как можно реализовать данный функционал правильно.

Добавлено через 42 минуты
Пробую через даункастинг (вроде это так называется)

Новый код для Circle, Line, foo и main:
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
class Circle: public GeomObject
{
public:
    int radius = 2;
    void print_circle() {cout << "I am a circle, my radius: "<< radius <<"\n";}
};
 
class Line: public GeomObject
{
public:
    int length = 3;
    void print_line() {cout << "I am a line, my length: " << length << "\n";}
};
 
void foo(GeomObject *arr, int n)
{
    for (int i = 0; i < n; i++)
    {
        GeomObject *arrp = &arr[i];
        Circle *cp = static_cast<Circle *>(arrp);
        if (cp)
            cp->print_circle();
 
        Line *lp = static_cast<Line *>(arrp);
        if (lp)
            lp->print_line();
    }
}
 
int main()
{
    GeomObject arr[2];
    Circle c = Circle();
    Line l = Line();
    c.print_circle();
    l.print_line();
 
    arr[0] = c;
    arr[1] = l;
 
    foo(arr, 2);
 
    return 0;
}
Объекты приводятся к своим исходным типам, но поля теряют свои значения.

Вывод программы:
Кликните здесь для просмотра всего текста
I am a circle, my radius: 2
I am a line, my length: 3
I am a circle, my radius: 0
I am a line, my length: 0
I am a circle, my radius: 0
I am a line, my length: 0


Вернуться к обсуждению:
Передача объектов дочерних классов через массив объектов родительского класса в функцию
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.01.2020, 16:44
Готовые ответы и решения:

Передача объектов пользовательских классов через QVariant
Требуется передать объект пользовательского класса , не наследованного от QObject, через QVariant....

Создание объектов дочерних классов
Допустим у меня есть класс Parent. И есть дочерние классы ChildA, ChildB, ChildC. Есть функция в...

Передача ссылки на объект класса (массив объектов класса)
Доброго времени, уважаемые форумчане. Прошу прощения за столь глупый вопрос, но правда очень долго...

Передача объектов другого класса в конструктор через params
Здравствуйте. В учебнике есть пример: класс Figure, класс Point. В зависимости от того, сколько...

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