![]() |
|
|
![]()
|
|
| wolverine17 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 2.5.2009 Репутация: нет Всего: нет |
Такой вопрос: как правильно в коде прописывать в поле объекта - массив, чтобы объект получил доступ к содержимому массива?
И ещё вопрос, если у объекта очень много полей, но их можно сгруппировать по общим свойствам того, что они описывают, то как лучше наполнять объект полями, чтобы уменьшить их к-во? вынести в отдельный дочерний класс?
|
|||
|
||||
| Нэраварин |
|
||||||||||||
|
Новичок Профиль Группа: Участник Сообщений: 46 Регистрация: 9.3.2009 Репутация: нет Всего: нет |
Вообще в С++ с массивами всё сложно, поэтому wolverine17 Советую вам более досконально разобраться с примитивными типами - массивами и указателями т.к. они тесно взаимосвязанны и чтобы двигаться дальше нужно понимать основы иначе дальше будет сложно, непонятно и вообще каша в голове. ИМХО зря вы так рано начали с классов!
Теперь по порядку обо всём:
Во первых не объекта а Класса Во вторых тип данных класс и был задуман как единый неделимый тип который объединяет в себе данные и методы обработки их, соответственно класс всегда имеет доступ к своим собственным данным! По хорошему во избежание дальнейших проблем в классе массив объявляют так:
и рядом с ним отдельной переменной его размер ( sizeOfmass ), далее рекомендую в конструкторе класса инициализировать этот массив. А дальше у вас ужас и каша:
Зачем здесь указывать оператор области видимости когда Вы используете собственные переменные класса?
Откуда вы тут взяли переменную а? вы её не передавали в конструктор если это глобальная переменная то уберите нахрен эту порнографию! Что значит:
Вы, что хотите? целый массив вот так вот запросто присвоить другому массиву через оперцию "=" ?, Нет так не пойдёт в С++ такое не работает!
Вопрос скорее проектирования чем языка в целом да и понятие "очень много полей" весьма растяжимое 10 - 20 полей это ниочём! поэтому это сугубо субъективное представления как и что в этом случае делать, Единственное что я могу порекомендовать на верняка так это не использовать бездумно наследование, использовать его нужно тогда и выносить "в дочерний класс" тогда и только тогда когда у них есть общие данные(поля) или методы по логике мол сделаем базовый класс заранее зная что у всех остальных будет например поле для хранения массива и нужна будет функция распечатывания этого массива вот тогда и наследуют чтобы не писать одно и тоже по 100! по крайней мере вам этого пока что хватит на вашем уровне Этот ответ добавлен с нового Винграда - http://vingrad.com |
||||||||||||
|
|||||||||||||
| wolverine17 |
|
||||||||||||||||
|
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 2.5.2009 Репутация: нет Всего: нет |
Уважаемый, есть такая поговорка: "иногда лучше жевать...", я не спорю, что что-то могу не знать по с++, но вы не только не ответили конкретно на вопрос, но и привели кучу воды, из которой почти всё абсолютно мне не нужно. Неужели нельзя ответить по сути вопроса, а не выписывать нравоучения?
1)
Ну если для вас со статич. и дин. массивами совсем пичалька, это ваши проблемы и учить матчасть именно вам. Я как бы не создавал тему в "C/C++: Для новичков", и не давал повода посылать меня учить матчасть, это жуть как раздражает. 2)
Читайте внимательно пож. вопрос. Я знаю что класс имеет доступ к своим полям так же как мозг человека имеет доступ к внутренним органам, потому что и там и там всё связано. Но, если неправильно что-то писать в коде, то никакого доступа к значениям переменных и не будет, даже если компилятор ошибку не выдаёт. 3)
Разница держать размер массива внутри класса или глобальной переменной - и так и так доступно в программе его значение, к сути моего 1-го вопроса роли не имеет, хотя вы правы, от глобальности лучше уходить там где это возможно) Про инициализацию учту. 4)
Здесь я согласен с недостаточностью моих знаний( И мне немного неясно ваше замечание, насчёт содержимого моего конструктора, - я же не использую конструктор по умолчанию, а компилятор на это ничего не говорит, воспринимая и интерпретируя всё содержимое полей нормально, т.е. у меня тут избыточность кода или нарушен уровень хорошего тона программирования или что? Приведите пож. пример правильного написания тела конструктора,согласно моего примера, если уж указали на ошибочность кода в этом месте. 5)
да глобальная, она и не должна быть тут, это на работе когда нечего было делать или перерыва на обед, использовал Builder Portable, а в нём глючит debagger, поэтому проверял через ShowMessage значение переменной, в которую хочу получить значение указателя на начало массива, что собственно говоря и есть мой 1-й вопрос. ========================================================================================
Да, но при наследовании, мы описываем общие поля в классе предке, и как наследник, дочерний класс будет иметь доступ к ним, а все остальные "личные" поля отправляются в дочерний класс, так вот чисто гипотетически если их будет 50-100, это ж будет неудобно содержать объекты этого класса с сотней полей? Мне интересно как реализуется на практике такое распределение. Организуются ли классы по наследованию так чтобы этого избегать и т.п.? |
||||||||||||||||
|
|||||||||||||||||
| xvr |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 48 Всего: 223 |
У вас правильно написанно. Проблема в том, что массивы нельзя копировать друг в друга простым присваиванием (так уж С/С++ устроен). Копируйте поэлементно (в цикле) или функцией memcpy (но с ней надо острожнее - для простых типов она подходит, но для копирования массива объектов может не подойти) Зависит от того, что это за поля. Если есть какая то логическая группировка, причем не только собственно полей, но и операций с ними, то такие поля (вместе с методами) можно оформить отдельными классами. От них можно наследоваться, но скорее всего нужно будет применить агрегирование, т.е. просто включить объект этого класса в объемлющий. Классический пример: мы пытаемся описать машину в виде класса. В машине есть много полей (и методов), описывающих мотор этой самой машины. Из этих полей (и методов) стоит сделать класс 'Мотор' и включить в состав класса 'Машина' (но не наследовать, т.к. Машина явно не является разновидностью Мотора, а содержит его, как часть себя)
Нэраварин имел в виду, что Class_nameA:: перед A лишнее (что в общем случае так). Но в вашем случае оно не лишнее, т.к. у вас есть параметр функции (конструктора) с тем же именем, и он перекрывает переменную класса. Кстати, это делать в любом случае не рекомендуется |
||||
|
|||||
| wolverine17 |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 2.5.2009 Репутация: нет Всего: нет |
Т.е. чтобы перекинуть инфу с массива, не принадлежащего классу (как в моём случае с массивов x_a и x_b) в массив-член класса, я должен сначало (как советовал Нэраварин) проинициализировать его в конструкторе, допустим хотябы нулями через memset, а потом то что светуете вы, копируя поэлементно (в цикле) или функцией memcpy?
так не лишнее или не рекомендуется? вы немного меня запутали)) За ответ на 2-й вопрос - большое спс, весьма доходчиво пояснили |
||||
|
|||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 48 Всего: 223 |
Да Не рекомендуется называть параметры функции (равно как и локалы внутри функции) так же, как поля класса - можно запутаться самому, и гораздо вероятнее - запутать других. И если имена параметров/локалов не совпадают с именами полей класса, то префикс с именем класса будет лишний. |
|||
|
||||
| Нэраварин |
|
||||||||||
|
Новичок Профиль Группа: Участник Сообщений: 46 Регистрация: 9.3.2009 Репутация: нет Всего: нет |
Я правильно понял человек с уровнем программирования Code Monkey делает МНЕ замечение НА ТЕМУ ЕГО ВОПРОСА В КОТОРОМ ОН НИЧЕГО НЕ ПОНИМАЕТ и в жалких никчёмных попытках пытаясь исправить ошибки выдаваемые ему компилятором катается лицом по клавиатуре и в случайных местах правит код?!
При этом просит подсказать ему ЭЛЕМЕНТАРНЫЕ вещи и когда их ему разжёвывают он начинает БЕСИТЬСЯ?
Да ещё и сетует, что "не ответили" на его вопрос! Может быть вы слишком тупы чтобы ПОНЯТЬ ответ? Если вас так тяготят нравоучения и посылы учить матчасть может не стоит писать на форум?общайтесь на прямую с "космическими энергиями" или гуглом xDИли вы свято верите в то, что волшебным образом ровно с двух слов "по сути вопроса"© wolverine17 вы резко всё поймёте и все проблемы разрешаться и код будет идеальным? тогда вам в палату №6 к Наполеону Более того после вот этих слов:
особено после этих вообще АХТУНГ:
Хочеться сказать:- ДУЙ обратно в школу! в вашем случае 1й курс универа базовые принцыпы ООП Этот ответ добавлен с нового Винграда - http://vingrad.com |
||||||||||
|
|||||||||||
| wolverine17 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 2.5.2009 Репутация: нет Всего: нет |
А не пошли б вы товарищ Нэраварин, на 3 буквы с топика!?
я не нуждаюсь в вашей неадекватной и наглой помощи! если вы не можете излагать по сути вопроса, и пишете километровую канитель, только указывая на недочёты кода, не поясняя при этом почему ж тут это или это лучше не делать, а сделать именно вот так - то я срать хотел на такую помощь! вода вода и ещё раз вода. вы тупой форумный троль!!! Учитесь излагать свои мысли как xvr. Человек отписался кратко, доходчиво и с ним приятно общаться, вы же начали свою длинную хрень с:
если вам нравится видеть с первой же фразы в ответе на поставленный вопрос - "идите кудато подальше и учите матчасть" (что очень близко по подтексту) - то это ваши проблемы. Мне нравоучения не нужны. -------------- Перепрочтите ещё раз, что вы писали в 1-м своём сообщении, и сравните с тем что ответил другой человек, это типо ваш ответ на вопрос? вы вообще не ответили на него! а тупо философией занялись! Не пишите больше ничего тут, мне ваша помощь, многоНЕУВАЖАЕМЫЙ, Нэраварин, не нужна! Это сообщение отредактировал(а) wolverine17 - 29.7.2014, 03:24 |
|||
|
||||
| Нэраварин |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 46 Регистрация: 9.3.2009 Репутация: нет Всего: нет |
Я смотрю вы вообще неадекват, вам в психушечке лечиться надо а не с людьми на форуме общаться!
Порой я жалею, что интернэт стал так легко доступен для всякого безмозглого быдла! Не интересует "километровая канитель"? Это ты скотина неблагодарная тут отнимаешь время и силы людей которые пытаються тебе помочь это в ТВОИХ интересах и ты скотина при этом смеешь хамить людям тратящим на тебя своё личное время? В таком случае Не проси тут помощи вали отсюда читай короткие и лаконичные книжки по сути! Страуструпа например там всё "легко и понятно"! кстати это так забавно когда быдло вроде тебя пытаеться заручиться поддержкой других, прям умиляет только вот ты сфейлился с твоих же слов:
и тут же :
он так доходчиво объяснил что вы "запутались", а быть может никто из отвечавших не виновать это у вас пусто в черепной коробке и вы слишком тупы чтобы понять ответ?! P.S. по сабжу ответ был дан, НО с нового винграда неправильно транслируется на старый форум из-за этого часть моих ответов была утеряна вот Оригинал ответа с нового винграда Это сообщение отредактировал(а) Нэраварин - 29.7.2014, 13:25 |
||||
|
|||||
| xvr |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 48 Всего: 223 |
Это сообщение отредактировал(а) Alexeis - 29.7.2014, 14:24 |
||||
|
|||||
| Нэраварин |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 46 Регистрация: 9.3.2009 Репутация: нет Всего: нет |
xvr да нужно было с самого начала дать ему предупреждение чтобы не хамничал а то совсем охренел главное сам просит помощи и ещё имеет наглость так себя вести либо сразу не церемонясь в бан чтобы не повадно другим было
|
|||
|
||||
| wolverine17 |
|
||||||||||||||
|
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 2.5.2009 Репутация: нет Всего: нет |
Вы всегда так начинаете помогать другим, давая оценку уровня их знаний с++, ничем необоснованную? Откуда вы можете знать? А потом уже:
это вы так самоутверждаетесь, указывая на менее опытность других пользователей или как?
вы царь и бог?) удивлю вас, но вы тут не один, есть более сведущие чем вы и более нормальные.
ещё раз говорю, помощь вроде вашей излишняя. в вашем самом первом посте лишь только 1 фраза меня заинтересовала, и то не совсем по сути вопроса, сколь по самому коду, а остальное стооооолько написанное - к чему?
вырванная фраза с контекста, суть которого была другая. Насчёт Class_nameA:: - были правы вы и xvr, а по поводу остальной части в конструкторе, где я не мог понять (ибо было всё правильно) к чему вы акцентировали внимание - промах копипаста, и надо было делать:
а не
как такое может быть, что отдельные фразы пропали с 1-го сообщ., а другие нет, и при том именно те, которые дополняли сообщ. выше места их пропажи? Это сообщение отредактировал(а) wolverine17 - 29.7.2014, 14:51 |
||||||||||||||
|
|||||||||||||||
| wolverine17 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 2.5.2009 Репутация: нет Всего: нет |
Изменил немного в коде:
ошибок компиляции нет, но начальную инициализацию массива в конструкторе, не вижу, т.к. поменяв 0 на другое число, напр. 1 - все элем. массива всё равно = 0( если присваивать значение из x_a и x_b в массиву-члена класса, то всё ли правильно в описании объектов и в нужно ли поле что относится к массиву в контрукторе с параметром? Это сообщение отредактировал(а) wolverine17 - 29.7.2014, 15:42 |
|||
|
||||
| baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 1 Всего: 101 |
из вашего кода не видно, как вы смотрите, но вообще оно работает: http://ideone.com/DiSxPK ЗЫ: изучать язык, глядя в отладчик - не слишком продуктивное занятие |
|||
|
||||
| Нэраварин |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 46 Регистрация: 9.3.2009 Репутация: нет Всего: нет |
Модератор: Сообщение скрыто. |
|||
|
||||
![]()
|
| Правила форума "С++ Builder" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C++ Builder | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |