Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

11.10.2009, 19:50. Просмотров 912. Ответов 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 ?


Заранее благодарен
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.10.2009, 19:50
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Массив содержащий пойнтеры к субклассам* (C++):

Массив: Сформировать массив С, содержащий те элементы массива А, имеющие значения кратные М, которые есть в массиве В. - C++
Сформировать одномерный массив С , содержащий те элементы исходных массивов А и (или) В, которые указаны в задании. Элементы массива А,...

Сформировать массив, содержащий члены ряда - C++
Задано количество членов разложения e = 2 + 1/2! + 1/3! + 1/4! + …, не превышающее 25. Сформировать массив, содержащий эти числа, вывести...

Имеется массив содержащий следующую информацию... - C++
Всем добрый вечер! С днем победы! Тут такой вопрос. есть задание тут 1. #include &quot;stdafx.h&quot; 2. #include &lt;string&gt; 3. #include...

Сделать массив констант, содержащий символы от '0' до '9' и от 'A' до 'Z' - C++
Как в С++ сделать массив констант, содержащий символы от 0 до 9 и от A до Z

Матрица и одномерный массив (Составить одномерный массив, содержащий количество буквенных символов в каждом из ее столбцов, подсчет символов) - C++
Помогите решить задачку: Дана матрица 5х7, элементами которой являются значения символьного типа. Составить одномерный массив, содержащий...

Дан двумерный массив, содержащий 12 строк и 14 столбцов - C++
Дан двумерный массив, содержащий 12 строк и 14 столбцов. Элементами массива являются целые числа. Упорядочить массив по невозрастанию...

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

Вот это шаманство... Практический ничего не понял Но проблему решил. Спасибо.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.10.2009, 11:31
Привет! Вот еще темы с ответами:

Дан массив целых чисел, содержащий 20 элементов - C++
Написал прогу, вот только интересно, правильно ли я понял условие, вообщем вот задание - Дан массив целых чисел, содержащий 20...

Сформировать массив, содержащий сведения о телефонах абонентов - C++
вот моя задача: Сформировать массив, содержащий сведения о телефонах абонентов. Структурный тип содержит поля: фамилия абонента,...

Создать массив структур, содержащий сведения о студентах - C++
Создать массив структур, что содержит сведения о студенах. для каждого студент указать № студ.билета, дата рождения, ФИО студента, адрес.

Создать массив структур, содержащий сведения о телепередаче - C++
Создать массив структур , содержащий сведения о телепередачи . Структура записи - № канала , название канала , тип передачи ( F -фильм , N-...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

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