Здравствуйте, CreatorCray, Вы писали: CC>>>В данном случае префикс позволяет понять в какую переменную в данном месте мы лезем: член класса, локальную или, простигосподи, глобальную. __>>с учетом того, что большая часть кода работает именно с локальными переменными, имело бы смысл делать префикс скоре не для них, а то весь код в префиксах получается. CC>Ну так и получается. Все локальные (параметры функции — локальные) без префикса, любые мемберы с m_, статики s_, глобальные g_. Больше никаких префиксов не надо.
для глоальных есть префикс :: про статически s_ первый раз слышу. писать m_ это как примерно писать сущ_ перед каждым существительным — удобно только тем, кто привык
__>>не вижу никакой разницы — вызывать p.x() или читать напрямую p.x из const Point &p; CC>Потому что далеко не всегда у тебя есть исключительно const ссылка на объект, и тогда в том месте можно в p.x ещё и писать, что может вызвать совсем не тот эффект, который ожидался. Получается дыра в интерфейсе через которую можно внутрях всё испортить. CC>Так что нет.
так и так дыра есть интерфейсе в виде set. для того, чтобы дыр не было Point должен быть иммутабельным
__>>людям, пришедшим из явы-C# это концепция дается с трудом, но все-таки надо же пользоваться именно инструментами языка, а не писать в стиле другого CC>в жабашарпах есть синтаксическая сахарная нашлёпка, называется property. Это автоматически создаваемый getter + setter, который можно переопределить.
фигня это по сравнению с const
__>> constexpr Point(int x, int y) : x_(x), y_(y) {} — зачем два конструктора, когда одного достаточно с дефолтными параметрами? CC>Спорно, ну да ладно. Тут скорее вопрос стилистики, единообразия интерфейсов и чистоты кода в более сложных случаях чем этот.
можно обьяснить политическим запретом дефолтных значений, но в данном случае уместно по-моему все-таки иметь дефолтные
CC>Публичные поля в классе — один из признаков говнокода. Хочешь публичные поля — определяй struct.
разумеется Point должен быть struct. не должно быть в нем ничего приватного
__>> void set_x(int x) { x_ = x; } — наркомания! __>> void set_y(int y) { y_ = y; } CC>Нет.
что нет? дырка в интерфейсе
__>>почему паскалевское именование в С++ проекте? CC>А какая компилятору разница?
это паскалевсокму компилятору нет разницы, потому что он регистр не различает, а люди мучаются CC>Что и как называть определяется принятым в команде coding standard.
__>> void SetToMin(const Point& other); — непонятная фигня. почему это метод класса Point? CC>А почему нет? Что оно делает внутри?
а х.з. а зачем такие х.з. методы в Point?
__>> std::string ToString() const; — почему это метод класса а не статич ф-ия? CC>А почему это должна быть статическая функция? Её ж пользовать неудобно. CC>Если чо, это вообще могло бы быть operator std::string () const;
ну да, влепить tostring в класс прямо мог только джавист-сишарпник. не должно быть это членом класса по уму