![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
JAnty |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 366 Регистрация: 6.12.2004 Где: Москва Репутация: 1 Всего: 2 |
Вот:
А если во 2м классе объявлю AnsiString str и в конструкторе присвою "Привет", то получится. Чо за фигня? /*Консольное написал для примера, пишу в Билдере.*/ -------------------- |
||||
|
|||||
Greeen |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 710 Регистрация: 13.8.2006 Где: Петербург Репутация: 7 Всего: 18 |
Все нормально, вывод - 55 (VS 2005) -------------------- Подпись больше не нужна |
|||
|
||||
JAnty |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 366 Регистрация: 6.12.2004 Где: Москва Репутация: 1 Всего: 2 |
А Билдер не хочет выводить.
-------------------- |
|||
|
||||
maxim1000 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 17 Всего: 110 |
когда в потомке объявляется переменная, совпадающая по имени с переменной из базового класса, начинается путанница:
когда объект рассматривается, как базовый - str означает c_CL1::str когда как потомок - c_CL2::str вот и получается: ----- в случае с одним объявлением 1. при создании потомка вызывается конструктор предка, он заполняет переменную c_CL1::str 2. первый printf оперирует c_CL1::str 3. второй - тоже, потому что она наследуется ----- в случае с двумя объявлениями 1. при создании потомка вызывается конструктор предка, внутри этого конструктора объект рассматривается, как c_CL1, потому используется c_CL1::str 2. первый printf тоже рассматривает объект класса c_CL1::str, потому и работает с заполненной переменной 3. второй printf работает с c_CL2, в нём объявлена вторая переменная str, которая перекрывает первую (т.к. имена у них совпадают), так что printf выводит c_CL2::str P.S. не стоит объявлять переменные с одним и тем же именем в предках и потомках без хорошей причины, ибо запутывает буквально вчера ловили связанный с этим глюк (не наш ![]() -------------------- qqq |
|||
|
||||
Greeen |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 710 Регистрация: 13.8.2006 Где: Петербург Репутация: 7 Всего: 18 |
JAnty, Билдер на свалку
![]() -------------------- Подпись больше не нужна |
|||
|
||||
Fazil6 |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 35 Всего: 60 |
||||
|
||||
JAnty |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 366 Регистрация: 6.12.2004 Где: Москва Репутация: 1 Всего: 2 |
Мда, в этом ООП сам чёрт ногу сломит.
Чтом я ногу не сломил, поменял названия да и всё, проподи оно всё проподом. ![]() Добавлено через 2 минуты и 37 секунд В новом проекте и у меня выводится, а в моём нет! Так что пришлось менять переменную. -------------------- |
|||
|
||||
Fazil6 |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 35 Всего: 60 |
maxim1000, и что следует из того, что ты написал?
|
|||
|
||||
_stranger_ |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 52 Регистрация: 3.10.2006 Где: город-герой Киев Репутация: 2 Всего: 2 |
JAnty что значит не получается? какие ошибки? что выводит? |
|||
|
||||
maxim1000 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 17 Всего: 110 |
ну, в основном, это было написано в ответ на вопрос "почему?" (приблизительно цитирование ![]() вот я и попытался объяснить, почему всё происходит так, как оно происходит ну а в качестве следствия можно рассматривать совет, что так делать в большинстве случаев не стоит... -------------------- qqq |
|||
|
||||
JAnty |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 366 Регистрация: 6.12.2004 Где: Москва Репутация: 1 Всего: 2 |
Я всё понял, но не совсем, дело в том что у меня нет конструктора (я слегка приукрасил), у меня есть функция выполняющая эти действия (присваивает нужные значения), вот и ошибка.
Раз переменная открытая, то она должна быть видна в обоях классах, но нет, видна но без знасения. Например как уменя:
Выведет 5 и всё; Добавлено через 7 минут и 1 секунду Приходится дописывать ещё и class2.CONSTRUCTOR() ; переменная одна, зачем ей 2 раза присваивать значение, а если мне надо её прочесть из одного класса а записать в другом, то неполучится, т.к а одна для одного класса, а другая для другого. -------------------- |
|||
|
||||
apook |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 794 Регистрация: 12.7.2006 Репутация: 9 Всего: 23 |
как так пишешь
работает что-ли -------------------- Мои руки из дуба, голова из свинца ну и пусть ... |
|||
|
||||
Fazil6 |
|
||||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 35 Всего: 60 |
хм... оригинально... У тебя это компиллируется? А вообще
по твоему примеру если предположить cl1.CONSTRUCTOR() ; , то это ведь для первого объекта. С чего во втором объекте твоя переменная должна инициализироваться? Вот и нет во втором значения |
||||
|
|||||
Greeen |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 710 Регистрация: 13.8.2006 Где: Петербург Репутация: 7 Всего: 18 |
И зачем такие извращения
![]() -------------------- Подпись больше не нужна |
|||
|
||||
Fazil6 |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 35 Всего: 60 |
ты бы проводил различия между классами и их объектами. У каждого объекта класса свои переменные, и когда ты в одном меняешь, то в другом естественно ничего не меняется |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |