быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,678
|
||||||
1 | ||||||
Ссылается ли на экземпляр производного класса переменная родительского типа в приведенном коде25.12.2012, 00:21. Показов 1150. Ответов 10
Метки нет Все метки)
(
Гербердт Шилдт не поленился, два раза повторил:
"по ссылке на объект базового класса можно обращаться к объекту производного класса" и привёл пример подобному ниже. Я ничё не понимаю, это ведь значит только одно, если нам нужна ссылка на производный класс, мы условно говоря, можем заменить её ссылкой на базовый класс. НО НЕ НАОБОРОТ А в этом компилящемся примере как раз наоборот и происходит :
0
|
|
25.12.2012, 00:21 | |
Ответы с готовыми решениями:
10
Как из метода производного класса вызвать поле родительского класса
Является ли переменная в приведенном коде - указателем? |
![]() 17437 / 12829 / 3361
Регистрация: 17.09.2011
Сообщений: 21,107
|
|
25.12.2012, 00:25 | 2 |
Нет, в примере все правильно и по книжке: на экземпляр производного класса ссылается переменная родительского типа.
0
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,678
|
|
25.12.2012, 01:01 [ТС] | 3 |
0
|
![]() 17437 / 12829 / 3361
Регистрация: 17.09.2011
Сообщений: 21,107
|
||||||
25.12.2012, 11:26 | 4 | |||||
Мы же про конструкторы говорим, правильно?
Конструктор класса b принимает аргументом ссылку на экземпляр класса b. В конструкторе унаследованного класса p вы передаете конструктору класса b ссылку на экземпляр класса p. В результате переменная b_ родительского конструктора ссылается на экземпляр класса p, то есть получается что-то вроде этого:
Имена классов и переменных, правда, идиотские, потому затрудняют восприятие и понимание.
0
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,678
|
|
25.12.2012, 12:16 [ТС] | 5 |
Так вы вывод-то из этих своих слов сделайте; то есть мы вместо ссылки (ожидаемой) на базовый класс подсовываем ссылку на производный. Так, нет?
0
|
![]() 17437 / 12829 / 3361
Регистрация: 17.09.2011
Сообщений: 21,107
|
|
25.12.2012, 12:21 | 6 |
0
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,678
|
|
25.12.2012, 15:04 [ТС] | 7 |
Ну вот. А мы не имеем права вместо ссылки на базовый класс использовать ссылку на производный класс. Вот и всё, собсно. Вот таблица:
[table= "option1='ссылку на базовый класс','НЕ МОЖЕМ заменить ссылкой на производный класс'; option2='ссылку на производный класс','МОЖЕМ заменить ссылкой на базовый класс'"] в общем нарушаем первую строку этой таблицы
0
|
![]() 17437 / 12829 / 3361
Регистрация: 17.09.2011
Сообщений: 21,107
|
||||||
25.12.2012, 15:16 | 8 | |||||
Не так.
Мы не можем (без явного приведения) использовать переменную производного типа для ссылания на базовый класс. В приведенном вами примере все наоборот - переменная базового типа используется для ссылания на производный класс, что позволяется делать без явного приведения типов, потому все ок. Вот аналогичный пример:
То есть никакого противоречия или нарушения правил.
0
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,678
|
||||||
25.12.2012, 16:18 [ТС] | 9 | |||||
Ему надо было в форулировках аккуратнее быть. Примерно так сказать:
Мы можем делать так, чтобы переменная типа "ссылка на элемент базового класса" ссылалась на переменную типа "ссылка на элемент производного класса" без явного приведения типа. И способы, какими можно это достигнуть:
0
|
![]() 17437 / 12829 / 3361
Регистрация: 17.09.2011
Сообщений: 21,107
|
|
25.12.2012, 18:20 | 10 |
Шилдта не читал, но уже не первый раз обращаю внимание на проблемы у людей с пониманием его объяснений, а особенно - примеров.
Что ни тема с просьбой пояснить чего Шилдт имел в виду, то сразу вспоминается вот эта картинка:
1
|
kravam
|
25.12.2012, 19:10
[ТС]
Ссылается ли на экземпляр производного класса переменная родительского типа в приведенном коде
#11
|
Не по теме: Особо не замечал за ним ничё такого (мне легче понять его, ибо многое знакомо из C++), но тут прямо ступор какой-то нашёл.
0
|
25.12.2012, 19:10 | |
Передача типа из производного класса в родительский Приведение переменной типа object к переменной производного типа в приложенном коде Выделить в приведенном коде три класса Какой смысл класса MyException в приведенном коде Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |