Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 18, средняя оценка - 4.72
AntonChik
1083 / 581 / 21
Регистрация: 11.11.2008
Сообщений: 1,544
28.05.2013, 09:11     Вектор объектов разных классов. Доступ к свойствам элемента вектора #1
есть базовый класс
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;
        }
особенно если производных классов будет много?
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.05.2013, 09:11     Вектор объектов разных классов. Доступ к свойствам элемента вектора
Посмотрите здесь:

C++ Взаимодействие объектов разных классов
C++ массив объектов разных производных классов
Запись и чтение объектов разных классов в один файл C++
C++ Создание коллекции объектов разных классов
Заданный вектор А, состоящий из n элементов. Переставить компоненты вектора, размещенные после самого элемента вектора А C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
AntonChik
1083 / 581 / 21
Регистрация: 11.11.2008
Сообщений: 1,544
30.05.2013, 05:49  [ТС]     Вектор объектов разных классов. Доступ к свойствам элемента вектора #2
актуально. буду рад любым зацепкам.
alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
30.05.2013, 06:04     Вектор объектов разных классов. Доступ к свойствам элемента вектора #3
зачем? Избавься от наркотического ЦПП и почувствуй счастье!

Добавлено через 1 минуту
Цитата Сообщение от AntonChik Посмотреть сообщение
насколько приемлемо писать так
непреемлимо, ты же кастуешь
ITcrusader
Эксперт C++
 Аватар для ITcrusader
176 / 162 / 8
Регистрация: 12.02.2013
Сообщений: 410
30.05.2013, 08:36     Вектор объектов разных классов. Доступ к свойствам элемента вектора #4
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;
//и т.д.
Как ваще ты тока придумал через одно место написать!
AntonChik
1083 / 581 / 21
Регистрация: 11.11.2008
Сообщений: 1,544
30.05.2013, 08:39  [ТС]     Вектор объектов разных классов. Доступ к свойствам элемента вектора #5
ITcrusader, если б было так просто, я бы не спрашивал.
Компилятор выдает "a not member of A", и так оно собственно и есть.
ITcrusader
Эксперт C++
 Аватар для ITcrusader
176 / 162 / 8
Регистрация: 12.02.2013
Сообщений: 410
30.05.2013, 08:44     Вектор объектов разных классов. Доступ к свойствам элемента вектора #6
тьфу ты, конеш, мы ж не о функциях виртуальных, а о данных Я невнимательно посмотрел, понял тебя, жди ответа.
Ответ на вопрос неоднозначен. Скажи, в твоей иерархии любой из классов, производных от A - должен иметь это свойство?
alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
30.05.2013, 08:51     Вектор объектов разных классов. Доступ к свойствам элемента вектора #7
Цитата Сообщение от ITcrusader Посмотреть сообщение
мы ж не о функциях виртуальных, а о данных
сразу сливайся в цпп-воронку

Цитата Сообщение от AntonChik Посмотреть сообщение
Компилятор выдает "a not member of A", и так оно собственно и есть.
это эпично! ТС признает свою абсурдность, но все равно героически ее отстаивает. Настоящий индеец!
ITcrusader
Эксперт C++
 Аватар для ITcrusader
176 / 162 / 8
Регистрация: 12.02.2013
Сообщений: 410
30.05.2013, 08:52     Вектор объектов разных классов. Доступ к свойствам элемента вектора #8
Цитата Сообщение от alkagolik Посмотреть сообщение
сразу сливайся в цпп-воронку
Что это значит?
alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
30.05.2013, 08:54     Вектор объектов разных классов. Доступ к свойствам элемента вектора #9
Цитата Сообщение от ITcrusader Посмотреть сообщение
то это значит?
это значит -- "если хочешь стать программистом -- забей на ЦПП"
ITcrusader
Эксперт C++
 Аватар для ITcrusader
176 / 162 / 8
Регистрация: 12.02.2013
Сообщений: 410
30.05.2013, 08:56     Вектор объектов разных классов. Доступ к свойствам элемента вектора #10
alkagolik, т.е. ты в ответ на мой пост предлагаешь мне отказаться от цпп?
alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
30.05.2013, 08:59     Вектор объектов разных классов. Доступ к свойствам элемента вектора #11
Цитата Сообщение от ITcrusader Посмотреть сообщение
т.е. ты в ответ на мой пост предлагаешь мне отказаться от цпп?
а [censure]! йа говорю что инструмент, выбранный тобой -- [censure] не то!
stima
429 / 284 / 16
Регистрация: 22.03.2011
Сообщений: 923
Завершенные тесты: 1
30.05.2013, 09:06     Вектор объектов разных классов. Доступ к свойствам элемента вектора #12
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();
это актуально для любого ооп языка так как не являтся особенностью языка, а является особенностью ООП
ITcrusader
Эксперт C++
 Аватар для ITcrusader
176 / 162 / 8
Регистрация: 12.02.2013
Сообщений: 410
30.05.2013, 09:09     Вектор объектов разных классов. Доступ к свойствам элемента вектора #13
Цитата Сообщение от ITcrusader Посмотреть сообщение
Скажи, в твоей иерархии любой из классов, производных от A - должен иметь это свойство?
Я не зря задал этот вопрос, поскольку это имеет значение. Если ответ - да, любой, то решение, предложенное stima - отличное.

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

P.S. А по поводу той лажи, что я по невнимательности написал, ну бывает
Кудаив
328 / 405 / 24
Регистрация: 27.05.2012
Сообщений: 1,162
Завершенные тесты: 2
30.05.2013, 09:11     Вектор объектов разных классов. Доступ к свойствам элемента вектора #14
Цитата Сообщение от ITcrusader Посмотреть сообщение
все гараздо сложнее
приводить указатели...
ITcrusader
Эксперт C++
 Аватар для ITcrusader
176 / 162 / 8
Регистрация: 12.02.2013
Сообщений: 410
30.05.2013, 09:15     Вектор объектов разных классов. Доступ к свойствам элемента вектора #15
Цитата Сообщение от Кудаив Посмотреть сообщение
приводить указатели...
Не обязательно. Расширить, например, иерархию дополнительным классом A_ext, промежуточным между A и классами A1, A2,...и работать с указателями на него, а не на A, как вариант.
alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
30.05.2013, 09:18     Вектор объектов разных классов. Доступ к свойствам элемента вектора #16
унаследуй любовь к людям!
stima
429 / 284 / 16
Регистрация: 22.03.2011
Сообщений: 923
Завершенные тесты: 1
30.05.2013, 09:19     Вектор объектов разных классов. Доступ к свойствам элемента вектора #17
Цитата Сообщение от ITcrusader Посмотреть сообщение
Если же не все производные классы имеют такой атрибут, все гораздо сложнее.
Они все имеют такие поля, какие есть в базовом классе но с разными модификаторами доступа (ибо как гласит ООП инкапсуляци маст би).

Конкретизируй пример и тогда тебе ответят поточней. А так мы разговариваем лишь о вариантах которых ты можешь сделать (как минимум 5 вариантов)
ITcrusader
Эксперт C++
 Аватар для ITcrusader
176 / 162 / 8
Регистрация: 12.02.2013
Сообщений: 410
30.05.2013, 09:21     Вектор объектов разных классов. Доступ к свойствам элемента вектора #18
Цитата Сообщение от stima Посмотреть сообщение
Они все имеют такие поля, какие есть в базовом классе но с разными модификаторами доступа (ибо как гласит ООП инкапсуляци маст би).
С чего вдруг все?
Может у него несколько производных имеют свойство "а", а несколько - нет. Базовый-то - пустой у него.
stima
429 / 284 / 16
Регистрация: 22.03.2011
Сообщений: 923
Завершенные тесты: 1
30.05.2013, 09:25     Вектор объектов разных классов. Доступ к свойствам элемента вектора #19
ITcrusader, уточню ... я отвечал подразумевая это
C++
1
2
class A {int a;}
class B : A {};
Просто прочитайте внимательней)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.05.2013, 09:32     Вектор объектов разных классов. Доступ к свойствам элемента вектора
Еще ссылки по теме:

C++ C++ матрица и вектор ( Для каждого элемента вектора определить, сколько раз он встречается в матрице)
C++ Добавление элемента в вектор классов

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

Или воспользуйтесь поиском по форуму:
ITcrusader
Эксперт C++
 Аватар для ITcrusader
176 / 162 / 8
Регистрация: 12.02.2013
Сообщений: 410
30.05.2013, 09:32     Вектор объектов разных классов. Доступ к свойствам элемента вектора #20
stima, ну ёлы палы) ну ясно, это ж основы ООП. Вопрос-то почему возник - потому что базовый класс свойства этого не содержит, но его содержат пара производных. Если ими иерархия исчерпана, да, интерфейс базового - решит задачу на ура, если же не исчерпана - вариантов решения несколько и они немного иные, один из которых - добавление промежуточных классов, наследующих от А и являющихся базовыми для: "a"-содержащих классов и не содержащих этого "a" классов.
Yandex
Объявления
30.05.2013, 09:32     Вектор объектов разных классов. Доступ к свойствам элемента вектора
Ответ Создать тему
Опции темы

Текущее время: 16:32. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru