Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.76/41: Рейтинг темы: голосов - 41, средняя оценка - 4.76
1090 / 588 / 121
Регистрация: 11.11.2008
Сообщений: 1,544

Вектор объектов разных классов. Доступ к свойствам элемента вектора

28.05.2013, 09:11. Показов 8253. Ответов 31
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
есть базовый класс
C++
1
2
3
4
class A
{
//...
}
есть производные классы
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
class A1 : public A
{
//...
public:
int a;
}
 
class A2 : public A
{
//...
public:
int a;
}
создаю вектор объектов
C++
1
2
3
4
std::vector<A> v;
v.push_back(new A1());
v.push_back(new A2());
//и т.д.
как теперь получать доступ к a, которого нет в базовом классе?
насколько приемлемо писать так:
C++
1
2
3
4
5
6
7
8
if(dynamic_cast<A1 *>(v[i]))
        {
        a_get=((A1 *)(v[i]))->a;
        }
if(dynamic_cast<A2 *>(v[i]))
        {
        a_get=((A2 *)(v[i]))->a;
        }
особенно если производных классов будет много?
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
28.05.2013, 09:11
Ответы с готовыми решениями:

Вектор объектов разных классов. Полиморфим
В общем проблема такая: есть вектор объектов разных классов, надо вывести информацию о каждом объекте. Класс А абстрактный; В потомок А;...

Доступ к свойствам объектов
Имеется метод, который возвращает несколько объектов вложенных друг в друга. Например в таком виде (при вызове print_r): Array ( ...

Получить доступ к свойствам объектов из базы
У меня есть таблица, в которой записаны объекты, содержащие некоторые свойства. Я указал для dropdownlist, что в качестве содержимого, хочу...

31
1090 / 588 / 121
Регистрация: 11.11.2008
Сообщений: 1,544
30.05.2013, 05:49  [ТС]
актуально. буду рад любым зацепкам.
0
 Аватар для alkagolik
1599 / 622 / 113
Регистрация: 15.07.2011
Сообщений: 3,548
30.05.2013, 06:04
зачем? Избавься от наркотического ЦПП и почувствуй счастье!

Добавлено через 1 минуту
Цитата Сообщение от AntonChik Посмотреть сообщение
насколько приемлемо писать так
непреемлимо, ты же кастуешь
0
Эксперт С++
 Аватар для ITcrusader
179 / 165 / 21
Регистрация: 12.02.2013
Сообщений: 410
30.05.2013, 08:36
AntonChik,

C++
1
2
3
4
5
6
7
8
std::vector<A*> v;
v.push_back(new A1());
v.push_back(new A2());
//и т.д.
 
int a1_value = v[0]->a;
int a2_value = v[1]->a;
//и т.д.
Как ваще ты тока придумал через одно место написать!
0
1090 / 588 / 121
Регистрация: 11.11.2008
Сообщений: 1,544
30.05.2013, 08:39  [ТС]
ITcrusader, если б было так просто, я бы не спрашивал.
Компилятор выдает "a not member of A", и так оно собственно и есть.
0
Эксперт С++
 Аватар для ITcrusader
179 / 165 / 21
Регистрация: 12.02.2013
Сообщений: 410
30.05.2013, 08:44
тьфу ты, конеш, мы ж не о функциях виртуальных, а о данных Я невнимательно посмотрел, понял тебя, жди ответа.
Ответ на вопрос неоднозначен. Скажи, в твоей иерархии любой из классов, производных от A - должен иметь это свойство?
0
 Аватар для alkagolik
1599 / 622 / 113
Регистрация: 15.07.2011
Сообщений: 3,548
30.05.2013, 08:51
Цитата Сообщение от ITcrusader Посмотреть сообщение
мы ж не о функциях виртуальных, а о данных
сразу сливайся в цпп-воронку

Цитата Сообщение от AntonChik Посмотреть сообщение
Компилятор выдает "a not member of A", и так оно собственно и есть.
это эпично! ТС признает свою абсурдность, но все равно героически ее отстаивает. Настоящий индеец!
0
Эксперт С++
 Аватар для ITcrusader
179 / 165 / 21
Регистрация: 12.02.2013
Сообщений: 410
30.05.2013, 08:52
Цитата Сообщение от alkagolik Посмотреть сообщение
сразу сливайся в цпп-воронку
Что это значит?
0
 Аватар для alkagolik
1599 / 622 / 113
Регистрация: 15.07.2011
Сообщений: 3,548
30.05.2013, 08:54
Цитата Сообщение от ITcrusader Посмотреть сообщение
то это значит?
это значит -- "если хочешь стать программистом -- забей на ЦПП"
0
Эксперт С++
 Аватар для ITcrusader
179 / 165 / 21
Регистрация: 12.02.2013
Сообщений: 410
30.05.2013, 08:56
alkagolik, т.е. ты в ответ на мой пост предлагаешь мне отказаться от цпп?
0
 Аватар для alkagolik
1599 / 622 / 113
Регистрация: 15.07.2011
Сообщений: 3,548
30.05.2013, 08:59
Цитата Сообщение от ITcrusader Посмотреть сообщение
т.е. ты в ответ на мой пост предлагаешь мне отказаться от цпп?
а [censure]! йа говорю что инструмент, выбранный тобой -- [censure] не то!
0
503 / 352 / 94
Регистрация: 22.03.2011
Сообщений: 1,112
30.05.2013, 09:06
1. Переменная одинакова по смыслу и значениям, муваем в базовый класс.
C++
1
2
3
4
5
6
7
struct Base { int a };
struct Derived1 {};
struct Derived2 {};
 
std::vector<Base*> v;
***
v[0]->a;
2.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
struct Base
{
    virtual int get_a() const = 0; //or not pure virtual
};
 
struct Base : Derived
{
    int get_a() const { return a; }
    private:
        int a;
}
 
std::vector<Base*> v;
****
v[0]->get_a();
это актуально для любого ооп языка так как не являтся особенностью языка, а является особенностью ООП
1
Эксперт С++
 Аватар для ITcrusader
179 / 165 / 21
Регистрация: 12.02.2013
Сообщений: 410
30.05.2013, 09:09
Цитата Сообщение от ITcrusader Посмотреть сообщение
Скажи, в твоей иерархии любой из классов, производных от A - должен иметь это свойство?
Я не зря задал этот вопрос, поскольку это имеет значение. Если ответ - да, любой, то решение, предложенное stima - отличное.

Если же не все производные классы имеют такой атрибут, все гораздо сложнее.

P.S. А по поводу той лажи, что я по невнимательности написал, ну бывает
0
419 / 418 / 72
Регистрация: 27.05.2012
Сообщений: 1,168
30.05.2013, 09:11
Цитата Сообщение от ITcrusader Посмотреть сообщение
все гараздо сложнее
приводить указатели...
0
Эксперт С++
 Аватар для ITcrusader
179 / 165 / 21
Регистрация: 12.02.2013
Сообщений: 410
30.05.2013, 09:15
Цитата Сообщение от Кудаив Посмотреть сообщение
приводить указатели...
Не обязательно. Расширить, например, иерархию дополнительным классом A_ext, промежуточным между A и классами A1, A2,...и работать с указателями на него, а не на A, как вариант.
0
 Аватар для alkagolik
1599 / 622 / 113
Регистрация: 15.07.2011
Сообщений: 3,548
30.05.2013, 09:18
унаследуй любовь к людям!
0
503 / 352 / 94
Регистрация: 22.03.2011
Сообщений: 1,112
30.05.2013, 09:19
Цитата Сообщение от ITcrusader Посмотреть сообщение
Если же не все производные классы имеют такой атрибут, все гораздо сложнее.
Они все имеют такие поля, какие есть в базовом классе но с разными модификаторами доступа (ибо как гласит ООП инкапсуляци маст би).

Конкретизируй пример и тогда тебе ответят поточней. А так мы разговариваем лишь о вариантах которых ты можешь сделать (как минимум 5 вариантов)
0
Эксперт С++
 Аватар для ITcrusader
179 / 165 / 21
Регистрация: 12.02.2013
Сообщений: 410
30.05.2013, 09:21
Цитата Сообщение от stima Посмотреть сообщение
Они все имеют такие поля, какие есть в базовом классе но с разными модификаторами доступа (ибо как гласит ООП инкапсуляци маст би).
С чего вдруг все?
Может у него несколько производных имеют свойство "а", а несколько - нет. Базовый-то - пустой у него.
0
503 / 352 / 94
Регистрация: 22.03.2011
Сообщений: 1,112
30.05.2013, 09:25
ITcrusader, уточню ... я отвечал подразумевая это
C++
1
2
class A {int a;}
class B : A {};
Просто прочитайте внимательней)
0
Эксперт С++
 Аватар для ITcrusader
179 / 165 / 21
Регистрация: 12.02.2013
Сообщений: 410
30.05.2013, 09:32
stima, ну ёлы палы) ну ясно, это ж основы ООП. Вопрос-то почему возник - потому что базовый класс свойства этого не содержит, но его содержат пара производных. Если ими иерархия исчерпана, да, интерфейс базового - решит задачу на ура, если же не исчерпана - вариантов решения несколько и они немного иные, один из которых - добавление промежуточных классов, наследующих от А и являющихся базовыми для: "a"-содержащих классов и не содержащих этого "a" классов.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
30.05.2013, 09:32
Помогаю со студенческими работами здесь

дан вектор А (N). написать программу нахождения минимального элемента вектора и его индекса. если индекс элемента парный, то часть вектора перед миним
дан вектор А (N). написать программу нахождения минимального элемента вектора и его индекса. если индекс элемента парный, то часть вектора...

Доступ к полям и свойствам объектов которые лежат в ArrayList
Всем привет! Есть класс Apple с методом getWeight. Объекты этого класса лежат в ArrayList. Как получить доступ к методу объекта который...

Разработать иерархию классов, демонстрирующее работу с коллекцией объектов разных классов
Задание: Разработать в соответствии с индивидуальным заданием иерархию классов и приложение, демонстрирующее работу с коллекцией объектов...

Доступ к свойствам пользовательского элемента управления
Создал пользовательский элемент управления.Нарисовал на нём круг и линию с помощью Visual Basic PowerPacks. Как осуществить доступ к нему...

Заданный вектор А, состоящий из n элементов. Переставить компоненты вектора, размещенные после самого элемента вектора А
Заданный вектор А, состоящий из n элементов. Переставить компоненты вектора, размещенные после самого элемента вектора А на начало, а...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка SDL3 из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru