Так что теперь структура может иметь виртуальную функцию и поддержку наследства? Какая разница с классами тогда? Какая истинная цель скрытия информации? [Дубликат

StackOverflow https://stackoverflow.com/questions/3845564

Вопрос

Возможный дубликат:
Каковы различия между структурой и классом в C ++

http://www.cplusplus.com/Reeference/std/typeinfo/type_info/

Я думаю, что мой «учитель» не сказал мне много о различиях между структурой и классами в C ++.

Я прочитал в некоторых других вопросах, касающихся наследования, по умолчанию общественности по умолчанию ... Я также догадаю, что структура не имеет конструкторов / деструктивных ...

Какие другие различия тогда? Должен ли они иметь значение так много?

И когда говорим о частных / защищенных атрибутах / методах, они не доступны во время выполнения, только потому, что компилятор сообщает ему так во время компиляции и сообщает об ошибке, верно? Затем сравнивая эти функции с классами, что справляется «информация», действительно принесет к программисту? Это здесь, чтобы, когда кто-то повторно использует класс, этот человек не будет злоупотреблять в классе, потому что компактные / защищенные вещи будут сообщены компилятором?

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

Это было полезно?

Решение

Что касается компилятора, нет разницы между struct а также class кроме доступности по умолчанию. Они просто два разных ключевых слова для определения то же самое. Таким образом, структуры могут иметь конструкторы, деструкторы, базовые классы, виртуальные функции, все.

Что касается программистов, это общее соглашение использовать struct для занятий с ними из этих вещей (конкретно которые Подпирать), или идти еще дальше и использовать struct Только для классов без пользовательских функций членов вообще не используют только государственные данные. Люди иногда связывают эту консультацию, потому что удивительно легко думать, что класс - это стручок, когда это не так, но, по крайней мере, они пытаются.

В C ++, по крайней мере, скрытие информации абсолютно не имеет никакого отношения к безопасности. Поставить это прямо с ума. Он не обеспечивает никакой безопасности, за исключением того же общего способа того, как любая хорошая практика кодирования делает для кода, которые легче рассуждать, и, следовательно, программисты делают меньше ошибок.

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

Это не «безопасно», потому что на любом данном компиляторе можно работать вокруг публичной / частной защиты. Но если пользователи вашего класса делают это, они используют немного гротескного взлома, они заслуживают для их кода, чтобы остановить компиляцию / работать, когда вы меняете свой класс, и если они придут к вам, чтобы жаловаться, вы можете смеяться над ними.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top