233 / 223 / 46
Регистрация: 12.12.2012
Сообщений: 1,928
|
|||||||||||||||||||||
1 | |||||||||||||||||||||
Вызов членов и объектов с наследника класса13.12.2014, 14:07. Показов 560. Ответов 13
Метки нет Все метки)
(
Есть базовый класс и два наследника:
Есть доступ только ко всему, что есть в CBase. А мне например нужно изменить iStart из CStart , потом его узнать в CEnd. Или нужно их объявить в CBase и далее у каждого объекта будет свое значение, но если так, то например изменив значение iValue в CStart , у CEnd оно будет нулю ровно..
0
|
|
13.12.2014, 14:07 | |
Ответы с готовыми решениями:
13
Вызов конструктора базового класса из класса-наследника Вызов переопределенного метода класса наследника из базового класса Вызов деструктора класса-наследника Вызов виртуального метода класса наследника из вектора |
16476 / 8974 / 2200
Регистрация: 30.01.2014
Сообщений: 15,589
|
|
13.12.2014, 14:36 | 2 |
pEntity, сначала свел все к базовому классу, а потом пытаешься получить частный случай. Определиться надо бы
![]() Если уж используешь полиморфизм, то и изменять состояние класса нужно полиморфно, в виртуальных методах. Это же разные объекты, как ты собрался изменять данные в одном объекте и получать их в другом? Я пока что только могу тебе посоветовать продолжить читать теорию. Что-то ты здесь явно недопонял. Правильно, потому что это разные объекты. Они магическим образом друг с другом не свяжутся.
1
|
![]() 8718 / 4299 / 957
Регистрация: 15.11.2014
Сообщений: 9,743
|
||||||
13.12.2014, 14:42 | 3 | |||||
Доступ к наследникам:
На практике, профессиональные программисты называют подобные поделия "говнокод":
Вот здесь поподробнее. Вы сами понимаете, что написали? Вы понимаете, чего вы хотите?
1
|
233 / 223 / 46
Регистрация: 12.12.2012
Сообщений: 1,928
|
||||||
13.12.2014, 14:56 [ТС] | 4 | |||||
Не понимаю)
Ну вот смотрите:
0
|
![]() 8718 / 4299 / 957
Регистрация: 15.11.2014
Сообщений: 9,743
|
||||||
13.12.2014, 15:23 | 5 | |||||
Так вы его и узнали. Вам в консольку напечатали значение этой переменной.
В ниже представленном коде член в базовом классе принимает значение 5. А наследники печатают его в консоль: http://rextester.com/ZBQVST23958
0
|
233 / 223 / 46
Регистрация: 12.12.2012
Сообщений: 1,928
|
|
13.12.2014, 15:33 [ТС] | 6 |
Но вы изменили то в конструкторе. А мне нужна функция.
Мне нужно так: В классе "А" вызываю функцию класса "Б", в "Б" меняется значение переменной, после получаю значение этой переменной в классе "Е" или любом другом. Как курировать одной переменной между всеми классами, чтоб легко менять значение её и получать в любом другом ?
0
|
![]() 8718 / 4299 / 957
Регистрация: 15.11.2014
Сообщений: 9,743
|
||||||
13.12.2014, 16:07 | 7 | |||||
Вы хотите что то такое?
http://rextester.com/ZKW9093
1
|
233 / 223 / 46
Регистрация: 12.12.2012
Сообщений: 1,928
|
||||||
13.12.2014, 16:49 [ТС] | 8 | |||||
Я уж и не знаю, в общем, почему у меня тут не работает Reset и как исправить?
0
|
![]() 8718 / 4299 / 957
Регистрация: 15.11.2014
Сообщений: 9,743
|
||||||
13.12.2014, 17:50 | 9 | |||||
Рекомендую вам ясно осознать, что такое "статические члены класса", и чем они отличаются от "членов класса".
В сообщении выше я привел вам пример рабочего кода. Особенное внимание обратите на строки: Изучите, что такое "локальные статические переменные", и в чем принципиальное отличие от использования "статических членов класса". http://rextester.com/BTT36470
1
|
233 / 223 / 46
Регистрация: 12.12.2012
Сообщений: 1,928
|
||||||
13.12.2014, 18:18 [ТС] | 10 | |||||
Спасибо. А это что такое ? int CFIRST::iNum=33;
Ну в общем то и работает, как я хотел. Правда наверно не лучший способ :-(. Я покажу, что я хочу, может вы предложите лучший вариант? Есть класс человека. Есть класс самой регистрации. Я хотел регать чела, потом обнулять их кол-во и снова регать..
Поможете что-то лучшее посоветовать по переустройству кода ?
0
|
![]() 8718 / 4299 / 957
Регистрация: 15.11.2014
Сообщений: 9,743
|
||||||
13.12.2014, 18:27 | 11 | |||||
С обычными членами класса все понятно: есть экземпляр класса. И значения его полей находятся в самом объекте: в куске памяти, которая была выделена под этот экземпляр.
Но как быть со статическими? Статическое поле существует вне экземпляров класса. Оно является собственностью всего класса, а не отдельного какого то экземпляра. Так где же по факту живет статическая переменная? Где она инициализируется? Запись:
0
|
10 / 10 / 5
Регистрация: 10.12.2014
Сообщений: 60
|
|
13.12.2014, 18:41 | 12 |
И вообще, hoggy прав, сначала разберитесь вообще с устройством классов, статическими и нестатическими членами класса, наследованием и полиморфизмом. Пока у вас не наблюдается признаков понимания и знания этих основ...
0
|
233 / 223 / 46
Регистрация: 12.12.2012
Сообщений: 1,928
|
|
13.12.2014, 18:44 [ТС] | 13 |
Шенец Николай, если конструктор там создать, да, она иницализируется нормально, я не могу её обнулить в процессе работы программы. Как мне её обнулить для DBInfo.
0
|
![]() 8718 / 4299 / 957
Регистрация: 15.11.2014
Сообщений: 9,743
|
|||||||||||
13.12.2014, 18:54 | 14 | ||||||||||
http://rextester.com/EFCK83428
Принцип использования фабрики вот такой:
но для его понимания необходимы базовые знания шаблонов с++
1
|
13.12.2014, 18:54 | |
Помогаю со студенческими работами здесь
14
Массив объектов класса. Печать строк-членов класса. Вызов деструкторов членов класса Создание экземпляра класса-наследника для переменной с типом базового класса Правда, что указатель класса-наследника не может указывать на объект класса-родителя? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |