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