Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
VladSharikov
22 / 22 / 7
Регистрация: 02.12.2010
Сообщений: 824
#1

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

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

Есть свой класс.
Пусть будет Class.
У него есть потомки. SubClassA и SubClassB.
Необходимо динамически выделить массив указателей на главный класс и заполнить его.
http://www.cyberforum.ru/cpp-beginners/thread421135.html
Такой вариант:
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++):

Динамическая память
Кто сможет помочь? Дана матрица А. Упорядочить элементы каждой строки в...

Динамическая память
Всем привет!!! взникла проблема с выполнением строки K=A++; при...

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

Динамическая память
Есть 2 массива одной размерности: int *m1 = new int , *m2 = new int ;...

Динамическая память
Дано натуральное число n и целые числа{a}_{1},{a}_{2},...,{a}_{n}. Выяснить,...

9
Jupiter
Каратель
Эксперт С++
6568 / 3989 / 400
Регистрация: 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
2335 / 1490 / 129
Регистрация: 05.06.2011
Сообщений: 4,149
23.01.2013, 04:40 #3
Проблем-то с какого места? Насколько могу судить, все три фрагмента ошибок не содержат.
0
VladSharikov
22 / 22 / 7
Регистрация: 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
Каратель
Эксперт С++
6568 / 3989 / 400
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
23.01.2013, 15:00 #5
все правильно компилятор ругается, чем обосновано приватное наследование в вашей задаче?
0
VladSharikov
22 / 22 / 7
Регистрация: 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 / 7
Регистрация: 02.12.2010
Сообщений: 824
25.01.2013, 15:51  [ТС] #7
Jupiter,

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

Я не об этом. Я о объявлении и инициализации указателей на базовый класс.
0
silent_1991
Эксперт С++
5007 / 3065 / 270
Регистрация: 11.11.2009
Сообщений: 7,043
Завершенные тесты: 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++
Народ, подскажите, плиз, что я делаю не так? Надо посимвольно ститать строку,...

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

Динамическая память
Как создать массив A через динамическую память ???

Динамическая память
Здраствуйте!!!! Помогите выделить память под двумерные массив элементами...


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

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

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