Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на C / C++


Информационный Канал Subscribe.Ru


RusFAQ.ru: Программирование на C / C++

Выпуск № 513
от 25.05.2004, 17:30

Администратор:
Имя: Nick.Box
URL: Информационный ресурс
ICQ: 365124
[censored], [censored]
О рассылке:
Задано вопросов: 1637
Отправлено ответов: 3265
Активность: 199.4 %
[Задать вопрос >>][Регистрация эксперта >>]
[Поиск в базе][Обсудить на форуме]


 Список экспертов, ответы которых опубликованы в данном выпуске

Sedric
Статус: Доверительный
Общий рейтинг: 136.53
[Подробней >>]
vitya
Статус: Профессиональный
Общий рейтинг: 109.21
[Подробней >>]
Fess
Статус: Доверительный
Общий рейтинг: 123.14
[Подробней >>]
 
CrackLab
Статус: Доверительный
Общий рейтинг: 148.78
[Подробней >>]
bocha
Статус: Начальный
Общий рейтинг: 154.16
[Подробней >>]


 Краткий перечень вопросов

Вопрос № 1625. И еще раз здравствуйте! Это опять я со своим вопросом насчет различий между структурой и классом. От... (ответов: 4)
Вопрос № 1626. Здравствуйте. Я студент первого курса спец. АСУ, помогите решить задачу в C++ Win32Console Applica... (ответов: 3)

Вопросов: 2, ответов: 7


 Вопрос № 1625

И еще раз здравствуйте!
Это опять я со своим вопросом насчет различий между структурой и классом. Ответы на мой второй вопрос немного разъяснили ситуацию, стало меньше путаницы в ответах экспертах, но все еще остается два разных варианта ответов.
Я приведу их, и я хочу чтобы мы (вы) вместе разобрались окончательно с этим вопросом. Надеюсь я вас не замучал!
Эксперт CrackLab отвечал:
*********
"По определению Бьерна Страуструпа (создателя С++) структура - это класс, у которого все члены по умолчанию являются открытыми (public). У класса же все члены по умолчанию являются закрытыми (private). Кажется это единственное отличие."
*********
И во второй раз:
*********
"Верить мне =)
Отвечаю по порядку:
2Sedric:
Структуры тоже полностью реализуют идею ООП, поддерживают инкапсуляцию, наследование, функции-члены, абстрактность.
2Fess:
Структура может содержать виртуальные и чистые виртуальные функции. Структура может быть базовой для класса и наследоваться от класса. Если бы уважаемый Fess прочитал бы Страуструпа (которого он и советует почитать) повнимательнее, то он бы не допустил этой ошибки при ответе.
2Vitya:
Как ни странно ни много чем... Различие единственное. И сюда заходят ни чтобы им указали читать книги, а чтобы ответили на вопрос.
Если со мной кто-то в чем-то не согласен - загружаем C++ (лучше поновее) и проверяем.
Удачи."
*********
*********
Эксперт Fess отвечал:
*********
" Приветствую Вас, AleX-X! На самом деле различий не так уж и много. Структура, как и класс, может содержать в себе секции private, protected и public, но по умолчанию все переменные и функции относятся к public, тогда как в классах по умолчанию используется private. Структура, в отличии от классов, не может содержать виртуальных функций. Структура не может быть базовой для класса, также она не может быть производной от класса, обратное утверждение также справедливо, Но разрешено наследование(в том числе и множественное) струры от структуры, и, соответственно, класса от класса. Но не советую тебе организовывать огромную иерархию наследования, основанную только на структурах. А вообще Страуструпа почитать не мешало бы... "
**********
И во второй раз:
**********
Мне. Но всё в нашем мире относительно. Я перечислил некоторые сходства и различия между классом и структурой, кто-то скажет, что эти различия существенны, кто-то этого не скажет. Но истина остается истиной, и она в том, что МОЖНО считать структуру облегченным классом, учитывая некоторые ньюансы, и использовать в соответствии с этим утверждением без ущерба логике и семантике программы. Например, структуры используются для совместимости, ведь они имеют идентичные реализации в разных компиляторах С++. На это опирались программисты, проектировавшие СОМ (что-то типа typedef struct interface). Adios!
**********
И опять кому верить??? Получается что единственное различие между классом и структурой это открытось/закрытость членов по умолчанию как говорит эксперт CrackLab и Страуструп или же так же есть и все те отличия о которых сказал Fess?
Я бы хотел сам проверить наследование структуры от класса и абстрактность структур но я не умею... Жду вашего ответа!



Вопрос отправлен: 21.05.2004, 18:33
Отправитель: AleX-X

[Следующий вопрос >>] [Список вопросов]

Отвечает Sedric

Приветствую Вас, AleX-X!
У всех нас есть последняя инстанция - отладчик!
P.S.Как будем резать Бьярна - вдоль или поперек?

Ответ отправлен: 23.05.2004, 13:36
Отправитель: Sedric


Отвечает vitya

Доброе время суток, AleX-X!
Опять же, вместо того, что бы спрашивать столько раз - почему бы не открыть стандарт - там все написано :)
Ответ же, опять же - в правах доступа по умолчанию - заметьте, что это относится не только к членам, но и к наследованию.
struct A {...};
struct B : A {...}; равнозначно struct B : public A {}; если же заменить struct на class, тогда public превратится в private. Второе же различие, как я уже говорил, POD может быть только на основе struct (еще union, но это из другой оперы).
Уважаемый эксперт Fess вас обманывает. Со структурой можно делать все, что можно делать с классом. В приложении код, скомпилированный тут: http://www.comeaucomputing.com/tryitout/. Это самый соответствующий стандарту компилятор. Пример содержит, как наследование (обычное, виртуальное, закрытое, так и виртуальные функции). В догонку, ув. Fess, где у Страуструпа (издание 3 или 3 специальное), находятся подобные высказывания, страницы в студию.


Приложение:

Ответ отправлен: 22.05.2004, 11:55
Отправитель: vitya


Отвечает Fess

Добрый день, AleX-X! Это я, тот самый Fess, которого ты пытаешься научить кодить на С++... :-)) Я велико извиняюсь за свою неточность. Да, была такая. Когда я говорил о невозможности написания структур С++ с виртуальными функциями, и невозможности наследования структуры от класса и наоборот, я был не прав. Но это не некомпетентность моя в роли программера на С++, а скорее халатность в роли эксперта рассылки. Дело в том, что я "правило хорошего тона" превратил в некую догму. Я должен был сказать, что это возможно, но ОЧЕНЬ не желательно. Такие идиомы таят в себе некоторые потенциальные ошибки. Это примерно как указатель на стековый объект. Вроде бы куда уж проще, ан нет... Время жизни стекового объекта ограничено и теоретически существует возможность того, что указателем на него воспользуются уже после удаления объекта. Тогда результат работы программы непредсказуем. Поэтому для написания НАДЕЖНЫХ программ нужно либо пользоваться идиомой зная С++ достаточно хорошо, либо не пользоваться ей вовсе. И именно поэтому я не стал посвящять в некоторые возможности С++ человека, который спрашивает об элементарном, т.е. не знает С++. Именно по той же причине, я думаю, эксперт Sedric заявил, что структуры не в полной мере поддерживают ООП, ибо создание иерархии наследования с помощью структур это прерогатива либо начинающих мозохистов, либо профи, которые знают, что делают. Один из законов кодинга гласит примерно следующее: "Если существует какое-либо условие (пусть даже теоретическое), при котором твоя программа "грохнется", то это условие обязательно выполнится!" Прошу прощения у всех, кого ввёл в заблуждение. Можешь учитывать второй мой ответ.
ЗЫ. Если кто-то со мной в чем-то не согласен, прошу излагать в письменном виде в 3-х экземплярах. :-))
ЗЫЫ. Страуструпа я, конечно же, читал...


Ответ отправлен: 22.05.2004, 17:45
Отправитель: Fess


Отвечает CrackLab

Доброе время суток, AleX-X!
Я уже сказал кому верить. Я все проверял и мои слова основываются не только на том что я думаю и что я читал у Страуструпа. Пусть Fess лучше сам все проверит.

Ответ отправлен: 21.05.2004, 19:10
Отправитель: CrackLab


 Вопрос № 1626

Здравствуйте. Я студент первого курса спец. АСУ, помогите решить задачу в C++ Win32Console Application.
"Агенту нужно объехать k городов. Каждый город он должен проехать один раз(кроме первого), в конце должен вернуться в первый. Каждый следующий город должен быть наиближайшим к агенту."
Знаю только то, что нужно использовать растояние между городами и матрицу. Спасибо большое. Пока.



Вопрос отправлен: 22.05.2004, 03:21
Отправитель: Tim

[Следующий вопрос >>] [Список вопросов]

Отвечает bocha

Добрый день, Tim!
1.Берешь учебник по дискретной матиматике
2. смотришь как решаются графы
3.делаешь обход оного
4.выводишь результат cout << N;
Вершины гафа в начале обхода можно представить в виде массива v[N]=0;, где N-их количество
ребра матрицей r[N][N], элементы которой соответствуют длине ребер и равны 0, если ребра нет
бершь заданную вершину, помечаешь ее(v[k]=1), смотришь строку r[k], гиде же min(n[k][i]) != 0;
помечаешь найденую вершину и так до конца.Когда все вершины помечены, смотришь, есть-ли ребро между последней и первой,
если нет - снимаешь отметку с предыдущей вершины, ищешь ребро, стоящее на предпоследнем месте по величине, ели нашел помечаешь
вершину и т.д. Хотя в том что правильно изложил алгоритм не уверен (давно это было, и математика - не тот предмет в котором я специалист).
Научись в общем сначала решать эту задачу на бумаге, когда разберешся то с переносом на с++ проблем быть не должно.
Ух, пока писал обыдно стало, что нэ помну. Шли мыл, пришлю свой ысходнык. До завтра, думаю, накалякаю.

Ответ отправлен: 22.05.2004, 10:32
Отправитель: bocha


Отвечает vitya

Здравствуйте, Tim!
Расстояния между городами и хранишь в матрице.
берешь первый город находишь минимум в данной строчке.
текущий делаешь найденный, город помечаешь, как посещенный, например все числа в его столбце делаешь равными -1 - е.
повторяешь процедуру, пока не посетишь все города. После чего возвращаешься в исходный город.

Ответ отправлен: 22.05.2004, 11:37
Отправитель: vitya


Отвечает Sedric

Приветствую Вас, Tim!
Представляете себе, а в ВУЗах есть такая хитрая штука - лекции.Может попробовать побывать там, а?

Ответ отправлен: 23.05.2004, 13:36
Отправитель: Sedric



Форма отправки вопроса

Внимание!
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+ или отправлять вопросы с сайта по адресу: http://rusfaq.ru/cgi-bin/Message.cgi.

(C) 2002-2003 Команда RusFAQ.ru.

 Персональные данные

Ваше имя:

Ваш e-mail:

Опубликовать мой e-mail в рассылке


 Вопрос и дополнение

Ваш вопрос:


Приложение (если необходимо):


Получить ответов:


 Выбор рассылки

Программисту
Assembler (24)
C / C++ (15)
Perl (2)
Builder / Delphi (17)
Pascal (20)
Basic / VBA (2)
Java / JavaScript (4)
PHP (12)
Криптография (5)
WinAPI (7)
Радиоэлектроника (8)
Пользователю
Windows 95/98/Me (35)
Windows NT/2000/XP (48)
"Железо" (30)
Поиск информации (16)
Администратору
Windows NT/2000/XP (23)
Linux / Unix (9)
Юристу
Гражданское право (10)
Семейное право (8)
Трудовое право (9)
КоАП (7)

Отправить вопрос всем экспертам выбранной рассылки.




Задать вопрос | Регистрация эксперта | Поиск в базе | Чат | Форумы | Новости
Проект экспертов RusFAQ.ru | Фотоальбом | Virus.RusFAQ.ru | Администрирование
Профессиональная WEB-Студия B.I.T.


Яндекс цитирования
© 2001-2004 Россия, Москва. Авторское право: Калашников О.А.

http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу


В избранное