При попытке очистить свой C++, я пытался найти лучший способ создания аксессуаров.Практические советы и рекомендации по связям с C++
Я хочу разъяснить свое понимание и выяснить, правильно ли я делаю. У меня есть несколько вопросов, но они кажутся довольно простыми, поэтому я свернул их все в один вопрос с переполнением стека.
Ниже приведен пример кода, представляющий то, что я думаю, что "правильный способ делать вещи:
class MyClass
{
private:
std::string StringMember_;
int IntMember_;
public:
MyClass(const std::string &stringInput, const int &intInput) : StringMember_(stringInput), IntMember_(intInput)
{
}
const std::string &StringMember() const
{
return StringMember_;
}
void StringMember(const std::string &stringInput)
{
StringMember_ = stringInput;
}
const int &IntMember() const
{
return IntMember_;
}
void IntMember(const int &intInput)
{
IntMember_ = intInput;
}
};
Мои вопросы:
Где мои аксессоров вернуть const
ссылочную переменную а, то есть const std::string
, это означает, что он (переменная члена моего класса) не может быть изменен. Это верно?
Последний const
до того, как тело метода указывает, что никакие члены класса, для которых этот метод не является частью, могут быть изменены, если они не указаны mutable
. Правильно ли это?
Где я проходил в параметрах метода const
, это означает, что я гарантирую, что эти параметры всегда сохраняются по мере их передачи, тем самым защищая любые исходные переменные, передаваемые в результате изменения тела метода. Правильно ли это?
Что касается ключевого слова mutable
, при каких обстоятельствах я бы действительно хотел использовать это? Я изо всех сил пытался подумать о хорошем сценарии, когда у меня будет метод const, который должен был бы модифицировать членов класса.
Аксессуры кажутся хорошей идеей даже для данных, которые никогда не будут публично открыты, потому что она обеспечивает одноточечную запись, позволяющую упростить отладку и так далее. Я думаю о правильных строках здесь, или это на самом деле совершенно бессмысленно и что нет необходимости в частных аксессуарах?
С чисто синтаксической точки зрения, следует ли писать мои ссылки, такие как const int& intInput
или const int &intInput
. Действительно ли имеет значение, где амперсанд, или это просто вопрос личных предпочтений?
И, наконец, что я делаю в примере выше хорошей практики? Я планирую начать работу над более крупным личным проектом, и хочу, чтобы эти основные основы были опущены, прежде чем я начну сталкиваться с проблемами позже.
Я использовал это в качестве ссылки: https://isocpp.org/wiki/faq/const-correctness
Почему downvote?Кроме того, я обновил заголовок, чтобы попытаться сделать его более понятным. – Interminable
Я предполагаю, что это потому, что вы задали несколько вопросов. Мы предпочитаем, чтобы вы задали один вопрос на вопрос. Тем не менее, все вопросы, кроме последнего, тривиальны, так что, на мой взгляд, все в порядке. Последний вопрос, однако, слишком широк, и мнение основано на stackoverflow. – user2079303
Я думал, что они слишком тривиальны для отдельных вопросов. Что касается последнего, я в основном пытался выяснить, действительно ли я делал что-то ужасное, что я не идентифицировал. – Interminable