В C++ иногда в определении класса сначала объявляются общедоступные члены, а затем частные. Но переменные или данные-члены обычно являются закрытыми и используются публичными методами. Итак, в этом случае переменные используются, но еще даже не объявлены. Таким образом, код становится трудным для понимания. Но я нашел известных программистов, сайты или книги, чтобы объявить закрытых членов позже. Кто-нибудь знает, в чем причина?
Зачем определять частные члены ниже общедоступных членов в С++?
Ответы (6)
Я поступаю таким образом, поскольку пользователям моего класса не нужны приватные члены, их интересует публичный API (т.е. как использовать мой класс).
Кроме того, в файлах заголовков я обычно просто объявляю функции-члены, а не определяю их, поэтому я все равно не обращаюсь к каким-либо закрытым членам.
struct
в первую очередь?
- person Florian; 27.02.2019
Мы читаем текст сверху вниз, поэтому самая актуальная информация должна быть вверху. В определении класса это общедоступный интерфейс.
Частные члены и реализация должны быть скрыты от заголовочного файла. Поместить определения закрытых членов внизу — это быстрый способ сделать это. Возможно, лучше использовать Pimpl и скрыть приватную часть вашего класс во внутренней структуре.
Обычно частные члены не имеют значения. Если я смотрю на класс, чтобы определить, как использовать его где-то еще в коде, меня не волнует его внутреннее устройство, поэтому поместите частные члены внизу, так как мне не нужно знать о них. Если я изменяю класс, я потрачу время на поиск закрытых членов и знаю, что они будут внизу, вместо того, чтобы просматривать весь класс.
Мы как противоположности: Мой вопрос
Я полагаю, что когда вы знакомитесь с классом, полезнее сначала познакомиться с общедоступным интерфейсом, а затем углубляться в частные члены, когда вам это нужно. Если вы начнете с просмотра закрытых членов, у вас не будет контекста их использования.
Согласованный. Частные члены должны быть объявлены внизу. Единственная веская причина для объявления закрытых членов в первую очередь, которую я нашел, — это когда функции нужно получить или вернуть пользовательский тип данных, например: вектор. Компилятор спросит вас о том, что это за данные.
Но даже в этом случае я предпочитаю делать:
{
private: /// advicing ofc theres more private below!
earlier declare just of the type
public:
private:
};