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

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

Войти
Регистрация
Восстановить пароль
 
 
SwanSONG
2 / 2 / 0
Регистрация: 30.01.2013
Сообщений: 36
#1

Доступ к данным потомка - C++

05.11.2013, 01:47. Просмотров 781. Ответов 20
Метки нет (Все метки)

Здравствуйте, коллеги!
В теме почти что полный 0, потому прошу сделать скидку

Есть базовый класс (CMyPoint), от него наследуют еще несколько (CMyStar,CMyFly и т.д.)
Создано несколько экземпляров (объектов?) всех этих классов, и все это свалено в объект-список CMyList
Его хедэр:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
struct SMyNode
{
    SMyNode *pNext;
    CMyPoint *pObj;
};
class CMyList
{
public:
    CMyList(void);
    ~CMyList(void);
    
    void AddList(CMyPoint *pNObject);
    void ShowAll(CDC *xdc);
    void MoveAll(CDC *xdc);
 
    SMyNode *pHead,*pCurr,*pTemp;
};
Проблема в том, что, находясь в классе CMyList, я могу добраться до методов родителя любого производного класса, (т.е. CMyPoint), но не методов потомка (к примеру, CMyStar), хотя в дебагере при отладке они есть, но даны в квадратных скобках [CMyStar]. Получается, в панели дебагера я раскрываю pCurr->pObj и имею все переменные и функции, описанные в классе-родителе CMyPoint плюс в квадратных скобках [CMyStar] - все хохяйство производного класса.
Прпостите, если не так описал
Теперь вопрос: как добраться в такой ситуации до переменных, уникальных для производного класса, т.е. не описанных в классе родителе?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.11.2013, 01:47
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Доступ к данным потомка (C++):

доступ к protected функции из потомка - C++
Есть базовый класс parent. У него есть метод func. Нужно дать потомкам parent, доступ к func у объектов типа parent. А всем остальным...

Доступ к private переменной класса из его потомка - C++
Здравствуйте! Как получить доступ к закрытой переменной родительского класса в методе наследника? #include <stdio.h> class...

Вызов специфических для потомка функций, не зная класса потомка - C++
Доброго времени суток. Когда-то давно делал работу в C#, а сейчас захотел повторить то же в C++. Затык вот в чем. был у меня...

Доступ к защищенным данным - C++
Возникла следующая проблема: мне необходимо обеспечить доступ к скрытым членам класса всем производным другого класса, при этом объявлять...

Доступ к данным при наследовании - C++
здравствуйте, есть иерархия классов, схематично можно представить так: namespace Singl { class CObs {}; template<typename T> ...

Доступ одного класса к данным другого - C++
Здравствуйте. Интересует следующий вопрос: Есть два класса, "Вектор" и "Матрица". Их реализации содержатся в двух разных файлах. Возникла...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
ValeryS
Модератор
6631 / 5039 / 466
Регистрация: 14.02.2011
Сообщений: 16,845
05.11.2013, 13:08 #16
Цитата Сообщение от SwanSONG Посмотреть сообщение
error: no default constructor exist for class "CMyFly"
а теперь смотрим
Цитата Сообщение от SwanSONG Посмотреть сообщение
CMyFly(int iiType,int iiPos,int iiColor,int iLimit,int ix,int iy,int cR,int cG,int cB);
конструктор с параметрами
а ты вызываешь без параметров
вот он и говорит нет такого
C++
1
CMyPoint *ptr = new CMyFly(1,2,3,4,5,6,7,8,9);
вот так вызывать должен
значения конечно взяты от балды, свои подставь
1
SwanSONG
2 / 2 / 0
Регистрация: 30.01.2013
Сообщений: 36
05.11.2013, 21:58  [ТС] #17
Огромное спасибо за помощь, победил!!! (победили?)
В CMyList::MoveAll (здесь крутится цикл) дописал в начало:
C++
1
CMyPoint *ptr;
Потом нашли объект, который НЕ CMyPoint (idType задается в CMainWnd):
C++
1
if(ptr->idType==1)
А потом dynamic_cast:
C++
1
CMyFly *ptr1=dynamic_cast<CMyFly*>(ptr);
После этого ptr1 содержит в себе собственные данные именно CMyFly!!!!!

Еще раз ОГРОМНОЕ спасибо, все получилось именно так, как хотел!!!
А то были дурные мысли в конструкторе базового класса прописать ВСЁ барахло от потомков, но эта идея мне показалась некошерной....

Можно считать, тема закрыта

Добавлено через 8 часов 20 минут
Опять грабли :-((((
Когда добавил еще один класс-потомок, то преобразование формально работает, но в дебагере - Unable to read memory
Это я накосячил?

Добавлено через 12 минут
Сейчас проверил - значение все-таки меняется, но в дебагере все равно унайбл.
Походу, глюк дебагере или глюк самой студии (у меня VS 2012 Ultimate + W8.1)
Как-то можно исправить ситуацию?
0
ValeryS
Модератор
6631 / 5039 / 466
Регистрация: 14.02.2011
Сообщений: 16,845
05.11.2013, 22:07 #18
Цитата Сообщение от SwanSONG Посмотреть сообщение
Когда добавил еще один класс-потомок, то преобразование формально работает, но в дебагере - Unable to read memory
сразу же первый вопрос отлаживаешь Релиз версию или Дебиг?
0
SwanSONG
2 / 2 / 0
Регистрация: 30.01.2013
Сообщений: 36
05.11.2013, 22:13  [ТС] #19
Дебаг
По факту все работает, но если верить дебагеру - нет
М.б. конфликт с Виндой? Все же в списке поддерживаемых осей 8.1 нет
Попробую поставить VS2013
Или есть иные решения - процесс замены студии - не быстрый
0
ValeryS
Модератор
6631 / 5039 / 466
Регистрация: 14.02.2011
Сообщений: 16,845
05.11.2013, 22:17 #20
Цитата Сообщение от SwanSONG Посмотреть сообщение
Походу, глюк дебагере или глюк самой студии (у меня VS 2012 Ultimate + W8.1)
у меня нет ни того ни другого не могу ничего сказать
да и скриншотик бы неплохо посмотреть
0
SwanSONG
2 / 2 / 0
Регистрация: 30.01.2013
Сообщений: 36
05.11.2013, 22:20  [ТС] #21
Не поверите, только собрался PrintScreen и Ctr-C->Ctr-V, дебагер очухался и испугался (точнее, в обратном порядке). Так что скрин предъявить не могу
Странно....
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.11.2013, 22:20
Привет! Вот еще темы с ответами:

Наследование классов. Доступ к данным базового класса - C++
Здравствуйте! Застрял на задачке... Суть самого задания: Создать класс Car (машина), который характеризуется торговой маркой (строка),...

Доступ дружественного оператора к приватным данным класса - C++
Здравствуйте. тока начал изучение С++; составляю прогу практически по учебнику - реализация класса Стринг при компиляции компилятор...

Доступ к данным в *.mdb посредством OLE DB -- это возможно? - C++
Почти две недели бьюсь над этой проблемой. Перерыл весь инет, книжку по OLE DB купил... Не могу понять каким образом через OLE DB...

Система складского учёта, доступ к данным и контроль над утилитами - C++
Вопрос абстрактный.Пока что. Я ещё не имею к той системе складского учёта.Потому как она лицензионная и её не скачаешь.) 1.)Мне просто...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
05.11.2013, 22:20
Ответ Создать тему
Опции темы

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