23 / 20 / 3
Регистрация: 12.08.2010
Сообщений: 206
|
|
1 | |
Отличия между структурами и классами18.08.2010, 12:38. Показов 25713. Ответов 58
Метки нет (Все метки)
Объясните пожалуйста, в С++, получается, что структура отличается от класса только тем, что у нее по умолчанию все данные public?
Т.е. наследовать структуры я тоже могу. Тогда как-то непонятен смысл создания двух одинаковых типов объектов, только что с разными названиями.
2
|
18.08.2010, 12:38 | |
Ответы с готовыми решениями:
58
Отличия между классами и массивами Отличия между классами String и StringBuilder Отличия между классами для работы с интернетом Разница между классами и структурами и другие моменты |
1186 / 542 / 78
Регистрация: 01.07.2009
Сообщений: 3,517
|
|
28.07.2011, 20:54 | 41 |
0
|
5 / 6 / 4
Регистрация: 18.11.2009
Сообщений: 661
|
|
29.07.2011, 01:10 | 42 |
А примеры применений автореферентных классов какие? Скажем структуры с ссылкой для себя используют для создания списков в любом яз программирования. Это - азбука. А вот об автореферентных классах сведений гораздо меньше.
0
|
Модератор
12458 / 7482 / 1753
Регистрация: 25.07.2009
Сообщений: 13,762
|
|||||||||||
29.07.2011, 01:21 | 43 | ||||||||||
Да в принципе всё то же самое
0
|
29.07.2011, 09:45 | 44 |
Еще приведу такой пример. В MSVS 2010 (про другие незнаю) если написать например struct A и сознательно сделать в ней (структуре) ошибку, то в сообщении об ошибке будет информация следующего рода:
2
|
5 / 6 / 4
Регистрация: 18.11.2009
Сообщений: 661
|
|||||||||||
30.07.2011, 02:49 | 45 | ||||||||||
Ну хорошо. Конструктив лишь в том, что может быть класс, содержащий указатель на себя типа
По поводу списков говорили - там достаточно структуры. Может список объектов с частично скрытыми полями и открытыми интерфейсами? Примеры? Добавлено через 15 минут да кстати провел эксперимент с похожим кодом
Однако при вызовах по ссылкам как полагаю, должен вызываться конструктор класса, но счетчик экземпляров все время n=1 . Как это объяснить? Сколько на самом деле объектов?
0
|
71 / 76 / 9
Регистрация: 30.06.2011
Сообщений: 176
|
|
30.07.2011, 06:31 | 47 |
Не должен. Конструктор вызывается только при создании объекта, а не при переходах по указателю. Конструктор всего один раз вызывался, значит n только один раз увеличится на 1.
0
|
1069 / 848 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
|
|
30.07.2011, 07:24 | 48 |
eugrita, хочешь примеров - почитай мою книжку:
http://www.ozon.ru/context/detail/id/3515464/
0
|
Делаю внезапно и красиво
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
|
|
30.07.2011, 09:13 | 49 |
Элементарно. К статической переменной можно получить доступ через любой мусор, приведённый к нужному типу.) Ведь this там не используется, важен только класс. Т.е. строчки 16-19 эквивалентны обращению test::n.
Добавлено через 1 минуту Это не ссылки, а указатели - раз. Объект создаётся только в строке 15 - это два.
0
|
Заблокирован
|
|
30.07.2011, 10:47 | 50 |
Как по мне основное отличие классов от структур - это наличие функций и методов в классе.
Хотя структуру как классы имеют свои переменный функций и методов в них нет, они могут быть внешними но не принадлежать структуре. В этом плане структура являет собой урезанную в функциональных возможностях весию класса
0
|
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
|
||||||
30.07.2011, 10:58 | 51 | |||||
-=ЮрА=-, сюрприз:
1
|
5 / 6 / 4
Регистрация: 18.11.2009
Сообщений: 661
|
|
30.07.2011, 11:26 | 52 |
Ну хорошо пусть так. А чего добился я этими вызовами? Обращения к 1 экз класса получаетcя?
Вопрос остается : в каких случаях прием использования ссылки внутри класса на самого себя эффективно работает? Его обл применения? Добавлено через 7 минут Ну хорошо. А чего я добился вызовом скажем k=s->a->a->n - обращение к тому же экземпляру переменной n? Такой синтаксис вроде возможен только в автореферентных классах
0
|
Каратель
|
|
30.07.2011, 12:42 | 53 |
что значит эффективно работает? покажите тогда пример не эффективной работы тогда
структуры данных Добавлено через 1 минуту такое возможно для всех статических членов
0
|
5 / 6 / 4
Регистрация: 18.11.2009
Сообщений: 661
|
|
30.07.2011, 12:51 | 54 |
под словами эффективно работает понимаю некую область задач или структур данных, создание которых происходит с помощью указанного приема - автореферентного класса.
А то мы, блин изучаем разные тонкости, возможности да еще в разных версиях С++ а к чему это все прилепить - в обсуждении ручки не доходят. Вроде как чистая математика- чистое искусство
0
|
Делаю внезапно и красиво
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
|
|
30.07.2011, 13:01 | 55 |
Т.е. реализации списков и подобных контейнеров в качестве ответа тебя не устроило?
Или ты не правильно понял выражение "ссылки внутри класса на самого себя"? Что непонятного в том, что объекты могут ссылаться друг на друга? Это же не ссылка объекта на себя, а ссылка на объект этого класса. Совершенно другой объект, расположенный по другому адресу. На тебе простой пример. Есть класс окна, в нём куча контролов. Контролы это тоже окна. Т.е. Класс окна и классы контролов совпадают (благодаря полиморфизму). Поэтому в классе окна хранятся указатели на контролы, а в контролах указатели на обрамляющее их окно. И никакой математики.
0
|
5 / 6 / 4
Регистрация: 18.11.2009
Сообщений: 661
|
||||||
30.07.2011, 16:12 | 56 | |||||
нечто похожее есть в заданиях по программированию Бауманки:
29.Моделировать очередь (руками), в качестве элементов которой могут использоваться числа и слова. Операции: добавление элемента, удаление элемента, печать элементов. Создать класс - потомок, который содержит процедуру сортировки слов по алфавиту. .. 27.Описать объект, включающий заданные поля и методы. Написать программу, которая создает массив объектов и список объектов и содержит процедуры, работающие с указан-ными структурами. Объект - слово. Параметры: текст, длина, количество согласных букв. Методы: конструктор, определяющий поле текста и длину, и процедура, определяющая количество глас-ных букв. Определить процент гласных букв в предложении. Реализовать два варианта (с массивом и списком). для 29. При решении 29 создавалось несколько классов TElement,TNum,TSlovo - как его дочерние, и класс TQueue...: вроде класс TElement - автореферентный (только я такого слова тогда еще не знал)
0
|
5 / 6 / 4
Регистрация: 18.11.2009
Сообщений: 661
|
|
30.07.2011, 16:23 | 58 |
да нет, конечно. Я их сам в свое время решил как халтура для студента. Но теперь только понял, что эта тематика задач похоже относится к обсуждаемой теме. А вы несогласны?
0
|
Каратель
|
|
30.07.2011, 16:25 | 59 |
0
|
30.07.2011, 16:25 | |
30.07.2011, 16:25 | |
Помогаю со студенческими работами здесь
59
Отличия между ++value и value++ Отличия между видеокартами Отличия между книгами Отличия между DVD Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |