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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Quisnam
3 / 3 / 0
Регистрация: 11.10.2009
Сообщений: 19
#1

Массив содержащий пойнтеры к субклассам* - C++

11.10.2009, 19:50. Просмотров 873. Ответов 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
class _OtherClass
{
public:
    _OtherClass(int num = 123): _p(num)
    { }
    int _p;
};
 
class Base
{
public:
    Base(int num = 100): _s(num)
    { }
 
    virtual void Info(_OtherClass& pClass) const = 0;
    virtual void Text() const = 0;
 
protected:
    int _s;
};
 
class Member : public Base
{
public:
    Member(int num = 500):
      Base(num)
      { }
};
 
class nMember : public Member
{
public:
    nMember(int num = 1000): Member(num)
    { }
 
    virtual void Info(_OtherClass& pClass) const
    { 
        cout << "Inherited from Member\n" << "_p is: " << pClass._p << "\n";
    }
 
    virtual void Text() const
    {
        cout << "1 2 3 4 5..." << _s << "\n";
    }
};
Существуют две основные проблемы:
Первая и самая важная проблема - мне необходимо, создать массив в котором будут пойнтеры к субклассам. Проблема в том, что этот массив должен быть в классе _OtherClass, а как Вы видите из кода, nMember обращается к _OtherClass, если просто создать такой массив в _OtherClass то классы будут обращатся друг к другу, что на практике не возможно... Во всяком случае даже если я применяю прототип класса, программа не компилируется, ибо один из классов не видит второй.
Сам массив сделать не проблема, к примеру вот так он будет выглядеть в main()
C++
1
2
3
4
Member* AnyName[2];
AnyName[0] = new nMember(); 
AnyName[1] = new nMember2(); 
//........
Если кто-нибудь знает, как такую конструкцию поместить в _OtherClass и поделится информацией, буду очень благодарен. Я пытался создавать friend функцию которая связала бы два класса, но ничерта не получилось.

#Edit:
Для второй проблемы решение нашел, оказывается позволительно использовать синтаксис: Base* AnyName = new nMember();


Вторая проблема, если у меня несколько веток субклассов от Base, например:
Base->Member->nMember
Base->Member2->_Member
То мне придётся создавать два массива:
Member* AnyName[2];
Member2* AnyName[2];

Как-нибудь можно сделать так, чтобы был всего один массив, при этом принимал и nMember и _Member ?


Заранее благодарен
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.10.2009, 19:50     Массив содержащий пойнтеры к субклассам*
Посмотрите здесь:

C++ Сформировать массив, содержащий сведения о телефонах абонентов
Создать одномерный массив, содержащий индексы элементов матрицы C++
Имеется массив содержащий следующую информацию... C++
C++ Дан массив целых чисел, содержащий 20 элементов
C++ Дан массив записей, содержащий сведения о студентах группы
C++ Дан двумерный массив, содержащий 12 строк и 14 столбцов
Создать массив структур, содержащий сведения о телепередаче C++
Создать массив M, содержащий номера нулевых элементов массива D C++
C++ Сделать массив констант, содержащий символы от '0' до '9' и от 'A' до 'Z'
Задача. Сформировать массив, содержащий сведения о телефонах абонентов C++
C++ Сформировать массив содержащий средние значения исходного массива
Сформировать массив, содержащий члены ряда C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
CheshireCat
Эксперт С++
2911 / 1239 / 78
Регистрация: 27.05.2008
Сообщений: 3,322
11.10.2009, 21:57     Массив содержащий пойнтеры к субклассам* #2
Проблемы нет. Используй boost::any или boost::variant, ну или boost::ptr_XXX (ptr_container).
Документация там вполне себе понятная.
Quisnam
3 / 3 / 0
Регистрация: 11.10.2009
Сообщений: 19
12.10.2009, 11:31  [ТС]     Массив содержащий пойнтеры к субклассам* #3
Цитата Сообщение от CheshireCat Посмотреть сообщение
Проблемы нет. Используй boost::any или boost::variant, ну или boost::ptr_XXX (ptr_container).
Документация там вполне себе понятная.

Вот это шаманство... Практический ничего не понял Но проблему решил. Спасибо.
Yandex
Объявления
12.10.2009, 11:31     Массив содержащий пойнтеры к субклассам*
Ответ Создать тему
Опции темы

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