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

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

Восстановить пароль Регистрация
 
VladSharikov
 Аватар для VladSharikov
22 / 22 / 1
Регистрация: 02.12.2010
Сообщений: 824
23.01.2013, 02:44     Динамическая память, свой класс #1
Есть свой класс.
Пусть будет 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;
работает. мне необходимо что-то подобное.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.01.2013, 02:44     Динамическая память, свой класс
Посмотрите здесь:

C++ Динамическая память
C++ Динамическая память
C++ Динамическая память.
Статическая память,Динамическая память. C++
C++ Динамическая память
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 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;
iifat
2179 / 1332 / 96
Регистрация: 05.06.2011
Сообщений: 3,690
23.01.2013, 04:40     Динамическая память, свой класс #3
Проблем-то с какого места? Насколько могу судить, все три фрагмента ошибок не содержат.
VladSharikov
 Аватар для 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;. Заранее Спасибо.
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
23.01.2013, 15:00     Динамическая память, свой класс #5
все правильно компилятор ругается, чем обосновано приватное наследование в вашей задаче?
VladSharikov
 Аватар для 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;. Заранее Спасибо.
ключевой вопрос в этом.
знаете как это разрешить?

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

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

Я не об этом. Я о объявлении и инициализации указателей на базовый класс.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.01.2013, 13:48     Динамическая память, свой класс
Еще ссылки по теме:

C++ Динамическая память [new]
Динамическая память C++

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

Или воспользуйтесь поиском по форуму:
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
29.01.2013, 13:48     Динамическая память, свой класс #10
Цитата Сообщение от VladSharikov Посмотреть сообщение
а наследуемый должен быть private
Это неверно. Сделав наследование приватным, вы сделали все методы базового класса приватными для доступа через производный класс.

Добавлено через 2 минуты
Цитата Сообщение от VladSharikov Посмотреть сообщение
Один из принципов ооп, не помню название.
Принципов ООП всего три: инкапсуляция, полиморфизм, наследование. Под наш случай больше всего подходит наследование, но в этот принцип никак не может входить уровень доступа при наследовании просто потому, что это особенность реализации. В таких языках, как C# или Java, уровень доступа при наследовании вообще нельзя указывать, он публичный всегда, но от этого данные языки не перестают быть объектно-ориентированными.
Yandex
Объявления
29.01.2013, 13:48     Динамическая память, свой класс
Ответ Создать тему
Опции темы

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