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

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

Войти
Регистрация
Восстановить пароль
 
VladSharikov
22 / 22 / 1
Регистрация: 02.12.2010
Сообщений: 824
#1

Динамическая память, свой класс - C++

23.01.2013, 02:44. Просмотров 432. Ответов 9
Метки нет (Все метки)

Есть свой класс.
Пусть будет Class.
У него есть потомки. SubClassA и SubClassB.
Необходимо динамически выделить массив указателей на главный класс и заполнить его.
Такой вариант:
C++
1
2
3
4
5
6
SubClassA *A = new SubClassA(bob);
SubClassB *B = new SubClassB(bob);
 
Class *ptr[5] = {A, B};
// и обращаемся.
ptr[0]->Get();
выделили. и даже динамически. но мне необходимо написать что-то подобное.
Объявили массив указателей, а затем где-то дальше в программе выделили нужное кол-во памяти. например вбили с клавы и объявили.
C++
1
2
3
4
5
6
7
SubClassA *A = new SubClassA(bob);
SubClassB *B = new SubClassB(bob);
Class *ptr;
ptr = new Class[2];
ptr[0] = A;
ptr[1] = B;
ptr[0]-> Set(ptr[1]->Get());
как это сделать?

ведь код типа
C++
1
2
3
4
int *mas;
mas = new int[5];
for(int i = 0; i < 5; i++)
    mas[i] = i;
работает. мне необходимо что-то подобное.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.01.2013, 02:44
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Динамическая память, свой класс (C++):

Статическая память,Динамическая память. - C++
a) Статическая память. Двумерный массив. Дан массив целых чисел. В массиве есть отрицательные числа. Определить координаты левого нижнего...

Динамическая память - C++
Каким способом можно задать динамическую память , кроме как через new ?

Динамическая память - C++
Добрый вечер! Возникла у меня такая проблемка, нужно от статической памяти перейти к динамической. То ли уже голова не варит, то ли руки не...

Динамическая память - C++
Кто сможет помочь? Дана матрица А. Упорядочить элементы каждой строки в порядке не убывания. (нужно составить 2 программы с...

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

Динамическая память с++ - C++
Как использовать динамическую память в с++

9
Jupiter
Каратель
Эксперт С++
6559 / 3980 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
23.01.2013, 04:37 #2
C++
1
2
3
4
5
SubClassA *A = new SubClassA(bob);
SubClassB *B = new SubClassB(bob);
Class** ptr = new Class*[2];
ptr[0] = A;
ptr[1] = B;
0
iifat
2270 / 1426 / 114
Регистрация: 05.06.2011
Сообщений: 3,913
23.01.2013, 04:40 #3
Проблем-то с какого места? Насколько могу судить, все три фрагмента ошибок не содержат.
0
VladSharikov
22 / 22 / 1
Регистрация: 02.12.2010
Сообщений: 824
23.01.2013, 14:14  [ТС] #4
Jupiter, а я обрадовался. вы мне всегда помогали.
Ваш код (или мой предыдущий косяк) выдает такую ошибку на строках
Цитата Сообщение от Jupiter Посмотреть сообщение
ptr[0] = A;
ptr[1] = B;
String is inaccessible base of SubClassA и то же для B.
Я так понял это с правами доступа при наследовании.
у меня классы унаследованы с правами private, нужные поля в базовом классе в полях protected.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class Class {
protected:
    int a, b;
public:
    // methods
};
 
class SubClassA: private Class {
    // private methods
public:
    // public methods
};
 
class SubClassB: private Class {
    // private methods
public:
    // public methods
};
у меня было сделано так. я поправил права при наследовании на public и все работает. но разве у меня было неправильно?


Jupiter,
и еще все таки.
мне нужна такая запись
C++
1
2
3
4
5
6
SubClassA *A = new SubClassA(bob);
SubClassB *B = new SubClassB(bob);
Class** ptr;
ptr = new Class*[2];
ptr[0] = A;
ptr[1] = B;
обратите внимание на строки 3 и 4.

Дело в том, что мне нужно объявить указатель в начале.
Затем в одной ветке меню его инициализировать (то есть ptr = new Class*[2], затем в третьей ветке его заполнить.
ptr[0] = A; ptr[1] = B;. Заранее Спасибо.
0
Jupiter
Каратель
Эксперт С++
6559 / 3980 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
23.01.2013, 15:00 #5
все правильно компилятор ругается, чем обосновано приватное наследование в вашей задаче?
0
VladSharikov
22 / 22 / 1
Регистрация: 02.12.2010
Сообщений: 824
23.01.2013, 15:43  [ТС] #6
Цитата Сообщение от VladSharikov Посмотреть сообщение
Дело в том, что мне нужно объявить указатель в начале.
Затем в одной ветке меню его инициализировать (то есть ptr = new Class*[2], затем в третьей ветке его заполнить.
ptr[0] = A; ptr[1] = B;. Заранее Спасибо.
ключевой вопрос в этом.
знаете как это разрешить?

хорошо поправлю права при наследовании.
0
VladSharikov
22 / 22 / 1
Регистрация: 02.12.2010
Сообщений: 824
25.01.2013, 15:51  [ТС] #7
Jupiter,

вопрос еще открыт.
Вы не поможете? из-за этого не могу решить задачу.
0
Jupiter
Каратель
Эксперт С++
6559 / 3980 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
25.01.2013, 17:31 #8
повторяю вопрос
Цитата Сообщение от Jupiter Посмотреть сообщение
чем обосновано приватное наследование в вашей задаче?
0
VladSharikov
22 / 22 / 1
Регистрация: 02.12.2010
Сообщений: 824
25.01.2013, 20:50  [ТС] #9
Я считал, что в базовом классе поле, которое должно быть защищено, должно быть protected, а наследуемый должен быть private. Один из принципов ооп, не помню название.

Я не об этом. Я о объявлении и инициализации указателей на базовый класс.
0
silent_1991
Эксперт С++
4985 / 3042 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
29.01.2013, 13:48 #10
Цитата Сообщение от VladSharikov Посмотреть сообщение
а наследуемый должен быть private
Это неверно. Сделав наследование приватным, вы сделали все методы базового класса приватными для доступа через производный класс.

Добавлено через 2 минуты
Цитата Сообщение от VladSharikov Посмотреть сообщение
Один из принципов ооп, не помню название.
Принципов ООП всего три: инкапсуляция, полиморфизм, наследование. Под наш случай больше всего подходит наследование, но в этот принцип никак не может входить уровень доступа при наследовании просто потому, что это особенность реализации. В таких языках, как C# или Java, уровень доступа при наследовании вообще нельзя указывать, он публичный всегда, но от этого данные языки не перестают быть объектно-ориентированными.
0
29.01.2013, 13:48
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.01.2013, 13:48
Привет! Вот еще темы с ответами:

Динамическая память - C++
в чем ошибка #include &lt;iostream&gt; #include &quot;conio.h&quot; using namespace std; class{A int a; double b; char s; }

Динамическая память - C++
Всем привет!!! взникла проблема с выполнением строки K=A++; при выполнении printf(&quot;\n__________ %d\n&quot;,K.gasaaa()); получаю левые...

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

Динамическая память - C++
Здраствуйте!!!! Помогите выделить память под двумерные массив элементами которого являются слова. Было бы хорошо листинг программы....


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

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

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