Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> КЛАССЫ, поговорим о них... 
:(
    Опции темы
Dodge
Дата 22.10.2006, 22:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 33
Регистрация: 21.10.2006

Репутация: нет
Всего: нет



У меня вот проблема большая... Я сколько учебников уже перечитал, вот не смог я понять классы. Что это и с чем его едят???  smile   smile 
Про них знаю только то что как они создаются. А вот их сущность и как с ними управляться я нифига не знаю. Кто нибудь ПОНЯТНЫМ ЯЗЫКОМ может объснить мне их ну или дать ссылочку на литературу...
 Мне вот задали создать вещественный класс Вектор с функциями доступа к его объектам членам и функцией вывода объекта класса на экран.    smile 
У кого нибудь может завалялся этот класс или может кто напишет. Пожалуйста объсните только каждую строчку написанного кода...   smile 
PM MAIL   Вверх
Daevaorn
Дата 22.10.2006, 22:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

Репутация: 51
Всего: 70



Цитата(Dodge @  22.10.2006,  23:37 Найти цитируемый пост)
Я сколько учебников уже перечитал, вот не смог я понять классы

Обчно с этим проблем не у кого не возникает
Цитата(Dodge @  22.10.2006,  23:37 Найти цитируемый пост)
ну или дать ссылочку на литературу

http://ru.wikipedia.org/wiki/%D0%9A%D0%BB%...%D0%B8%D0%B5%29
Цитата(Dodge @  22.10.2006,  23:37 Найти цитируемый пост)
У кого нибудь может завалялся этот класс или может кто напишет

Поищи на этом форуме. Тут часто такие пишутsmile
PM MAIL WWW   Вверх
Gwendolen
Дата 22.10.2006, 22:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 119
Регистрация: 5.4.2005

Репутация: нет
Всего: 1



Цитата

Класс это определяемый пользователем тип. Он может иметь конструктор и деструктор и предназначенный для скрытия, объедения по сыслу или более удобного обращения к функциям и даннным, которые становятся членами этого класса.


А так учиться и учиться, написать не пример, а реальную программу , выполняющую чтонибудь полезное и вскоре все станет ясно.
--------------------
Наносите пользу и причиняйте добро!
PM MAIL   Вверх
Palladin
Дата 23.10.2006, 00:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 932
Регистрация: 15.5.2007
Где: Беларусь г.Гомель

Репутация: нет
Всего: 17



к сожалению это не "понятный язык" 
Вообщем даже незнаю как растолковатьsmile
Вообщем класс это набор функции или объектов или того и другого, их главная фишка это наследование, т.е. то что переменный класса наследуют все их методы(методы это тоже что и функции но в классе) 
Ты наверняка играеш в компьютерные игры, вот и рассмотрим на фоне их:
Допустим какаянить стратежка:
В твоей стратегии есть отряды(скажем отряд из 10 человек) у отряда есть свои свойства(опыт, ранг, кол-во убитых раненых допустим из-10 после боя осталось 4) если бы писались процедуры для этого(или ещё хуже небыло бы  процедур) то код игры был ОГРОМЕН, были бы миллионы строк кода и из-за этого бы игра требовала  уйму ресурсов, но умные головы вначале придумали процедуры и функции, а потом и до классов дошли
но мы отвлеклись, вот твой отряд, программисты создают класс ЧЕЛОВЕК(и набивают его различными сво-вами человека(функциями)) когда ты строиш отряд то в другой класс(ОТРЯД(также с функциями присущеми отряду, ну там мораль и т.д.)) добавляются 10 таких классов "человек", максимальное кол-во человек в одном втором классе 10, после боя из класса ОТРЯД убирают погибших(в нашем случае 6) а выжившим даются бонус опыта, звание какоенить и т.д. в случае если ты решишь полечить своих солдат в больнице, то в класс ОТРЯД добявятся недостоющие ЧЕЛОВЕКИ(т.е. классы)

Короче очень замудренно, не быдь мне преподователем но вот суть:

БЛАГОДАРЯ КЛАССАМ МОЖНО ЗНАЧИТЕЛЬНО УПРОСТИТЬ АЛГОРИТМ ПРОГРАММЫ, УМЕНЬШИТЬ НАГРУЗКУ НА СИСТЕМУ(РЕСУРСЫ ПК), УМЕНЬШИТЬ КОЛ_ВО СТРОК КОДА, А БЛАГОДАРЯ ЭТОМУ ТЕБЕ БУДЕТ ЛЕГЧЕ НАЙТИ ОШИБКУ ИЛИ ПРОАПГРЕЙДИТЬ ПРОГРАММУ и т.п.

Ещё я понял что класс это просто-напросто тобою созданный тип(ну такой как int,float и т.д. с присущеми св-вами допустим если бы ты сделал класс int то тебе бы пришлось делать возможность(писать процедуры) сложения, деления, умножения, перепода типа int в др. и т.д.) 

Классы рулёз, сам недавно начал С++ учить, классы понял, и мне этот язык с каждым днём всё больше и больше нравиться, глюков конечно уйма(может и не глюков, может это я такой грамотейsmile ) Вообщем не забивай со временем ты сам догониш что да как!!!! smile 

В твоей же задаче тебе сказано сделать класс вектор, т.е. ты в зависимости от дальнейшего его использования должен  сделать класс с набором функций(методов и св-в) т.е. пользователь допустим захочет его построить, для этого нужна процедура построения(т.е. делай функцию построения в которую будут передаватся координаты вектора), сделай возможность построения двух векторов и проверку их пересечения\расхождения(для этого нужно будет завести две переменные твоего класса), сделай функцию благодаря которой пользователь после построения нескольких векторов смог бы их перемножить один на другой и т.д. и т.п. 

Сложно конечно но если чтонить подобное сделаеш помимо высшего балла приобретёш бесценный опыт, тебе дали прекрасную задачу, если ты хорошенько над ней поработаеш(и над собой тоже) то через пару продуктивных дней ты будеш гуру в классе(группе) smile 

вообщем УДАЧИ_УДАЧИ_УДАЧИ и ещё раз УДАЧИ smile 

P.S. Во я навернул smile 


--------------------
Глуп тот кто полагается на истину авторитета, а не на авторитет истины
[color=red]KAV&KIS==Evil[/color]
PM MAIL   Вверх
skyboy
Дата 23.10.2006, 01:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 1
Всего: 260



  • любой "простой" тип(int, float, char) нужен для того, чтоб мы, имея тип, могли знать, как данные такого типа обрабатывать. ведь если не известно, целое число(хранимое в 2 байтах) или вещественное(скажем, в 8 байтах) мы умножаем на два, то откуда нам знать, получим ли мы переполнение(когда 65535 находится в двухбайтной целочисленной переменной) или же просто произведем расчет. конечно, есть решения(языки/трансляторы), где типы задавать не надо, но речь не о них.
  • далее есть массивы, которые, основываясь на примитивных типах данных, позволяют построить цепочки данных, которые имеют одинаковое наполнение и обрабатываться будут одинаково. 
  • потом есть более сложные типы, где данные "сгруппированы": т.н. "структуры"(С++) или "записи"(Паскаль). Логика их использования: сразу несклолько(даже разнотипных!) данных собраны в одном месте, что значительно упрощает(может упростить) понимание кода. Ведь код:
    Код

    points[i].X= 25;
    points[i].Y= 38;

    значительно понятнее кода(конечно, неясно назначение массива Points, но то, что он определяет точки на одной плоскости - видно сразу из названия; и то, что  в каждой записи поле X и Y определяют координаты одной точки - тоже ясно; с массивами не так все прозрачно)
    Код

    X[i]= 25;
    Y[i]= 38;

    Т.о. структуры, при использовании тех же "примитивных" элементов в качестве основы обеспечивают возможность собрать данные "в одном месте", если они логически связаны друг с другом.
  • следующий шаг - классы. в этом случае имеем практически ту же структуры, но с одним "незначительным" отличием - в эту структуру(класс) могут входить кроме полей "примитивных" типов ещё и методы(процедуры и функции), а также свойства(практически - эмуляция полей, когда при обращении "вроде как к полю" происходит неявное обращение к методу, получающему значение или методу, устанавливающее значение). То есть, класс позволяет кроме того, что сгруппировать данные, связанные логически, в одном месте(это и структура может), но и привязать к этим данным собственные способы обработки этих данных(это я про методы) и ещё много чего другого(что я, наверное, зря "оставил напоследок"). Во-первых, классы могут наследоваться(остальные описанные механизмы допускают только "вложения": например, массив массивов или структура как поле другой структуры) и до/переопределяться(это кит по имени "наследование"). Во-вторых, класс может выступать в роли другого класса(точнее, объект одного класса "прикидываться" объектом другого класса); в Паскале есть нечто отдаленно похожее: запись с вариантами. Удобно, когда надо однотипно обработать объекты разных классов(читай: переменные разных типов). Как пример могу привести подсчет общей площади, занимаемой совокупностью геометрических фигур: обработка каждой сводится к вычислению значения её площади, т.е. можно говорить о логической однотипности. А с использованием классов можно сделать однотипность и в коде(Этот кит называется "полиморфизм"). А третий кит: "инкапсуляция". Что означает, что при правильном проектировании(правда, это все не аксиомы - бывают исключения) класс(как тип) и объект(как реализация этого типа) - будет "вещью в себе", то есть логически законченной единицей. Если функции - ничто без параметров, а данные - ничто без процедур обработки, то объект(как экземпляр класса) включает в себя и данные, и процедуры по обработке, потому совсем безболезненно(в идеале) может быть вырван из контекста и использован в другом месте(с процедурами/"обычными" переменными можно долго и больно наступать на грабли: то не все перенесли, то глобальные переменные не инициализировали, то конфликт имен)
В общем, вижу эволюцию типа:
"примитивные" типы -> массивы -> записи(структуры) -> классы
И все это направлено в сторону быстрой разработки, легкого понимания и простого использования.
PM MAIL   Вверх
Palladin
Дата 23.10.2006, 02:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 932
Регистрация: 15.5.2007
Где: Беларусь г.Гомель

Репутация: нет
Всего: 17



Скайбой истину глаголитsmile так как он описал скорее всего не будет полностью понятно для человека только что начавшего учить первый язык программирования, но суть уловил(я правда тоже smile ) за что ему по репе, ждём ответ автора темы, понял он иль нет то что мы написали smile 


--------------------
Глуп тот кто полагается на истину авторитета, а не на авторитет истины
[color=red]KAV&KIS==Evil[/color]
PM MAIL   Вверх
regis
Дата 23.10.2006, 13:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 232
Регистрация: 12.12.2005
Где: Москва, Россия

Репутация: 2
Всего: 7



Тут я бы начал с того, что класс -- это МЕХАНИЗМ АБСТРАКЦИИ. Т.е. это средство создания объектов, абстрагирующих некие концепции из реального мира (особ. в программах-симуляторах или компьютерных играх), или, скажем, мира математики (векторы, матрицы, множества и т.п.)
Идеальный класс -- это "черный ящик", объекты которого создаваются исключительно конструктром, и взаимодействие с ними осуществляется только посредством методов. Наследование -- механизм, позволяющий создавать новые классы на основе уже определенных (суперклассов), расширяя, таким образом, их функциональность. Полиморфизм -- позволяет давать методам новые определения в подклассах, определяя таким образом специфику их поведения.

Главное -- в основных концепциях ООП четко разобраться, потом будет проще.  smile 

--------------------
В. В чем разница между hardware и software?О. В отличие от второго, по первому можно двинуть кулаком или пнуть ногой.
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1297 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.