реклама на сайте
подробности

 
 
2 страниц V  < 1 2  
Closed TopicStart new topic
> const staic простыня из констант - boilerplate
Forger
сообщение Aug 6 2018, 17:42
Сообщение #16


Профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 22-02-05
Пользователь №: 2 831



Цитата(С дуба рухнул @ Aug 6 2018, 20:39) *
я начинающий, вчера книгу купил с++ за 21 день

Отписаться тут через 21 день, минимум.


В данном (простейшем) случае достаточно добавить еще один enum, где будут указаны значения числа дней в каждом месяце


--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
Go to the top of the page
 
+Quote Post
С дуба рухнул
сообщение Aug 6 2018, 17:51
Сообщение #17





Группа: Участник
Сообщений: 12
Регистрация: 6-08-18
Пользователь №: 106 507



Ваш багаж знаний неужели кончился? Попрошу еще ответов не от Вас пожалуйста, слушать ваше детское "сам дурак мало били *надоело

Цитата(Forger @ Aug 6 2018, 17:42) *
В данном (простейшем) случае достаточно добавить еще один enum, где будут указаны значения числа дней в каждом месяце.

А потом следить за когерентностью энумов, особенно когда их за сотню? И вместо простого и понятного {jan,31} иметь два энума, в которых не дай бог что либо не по порядку пойдет. Не, на таком уровне я и define могу. А потом в исходную структуру добавится поле, указатель на уже реальную переменную, которую надо инитить в конструкторе, и мне вешаться с вашими энумами. Ясно все. Просто многословный язык. Кстати применения constexpr так и не привели.
А вы всегда меняете исходные сообщения после того как вам ответили? Не знаете как создать константную расшаренную таблицу на все экземпляры и потомков, а советуете книжку почитать. Вы правда думаете, что вопрос от нечего делать? Рефакторю код одного му.. специалиста с энумами на 500 записей, 5 штук, все должны соответствовать друг другу. Непонтно чем он думал, видимо

Сообщение отредактировал С дуба рухнул - Aug 6 2018, 17:59
Go to the top of the page
 
+Quote Post
Forger
сообщение Aug 6 2018, 18:09
Сообщение #18


Профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 22-02-05
Пользователь №: 2 831



Для подобной примитивной задачи мощь языка C++ со своими классами и наследования - как собаке пятая нога.

Чтобы было понятно почему так, распишите хотя бы для себя как вы будете использовать весь это колхоз непосредственно в коде.


Цитата(С дуба рухнул @ Aug 6 2018, 20:51) *
Не знаете как создать константную расшаренную таблицу на все экземпляры и потомков,

Если знаете как это делать, то зачем тут пишите?

Цитата
а советуете книжку почитать.

Не советую. Но если уж заговорили про книжки, то рекомендую эту.
От нее горааааздо больше пользе, чем от той, который вы привели выше.


Постараюсь еще раз, но в этот раз, учитывая обстоятельства, уже "на пальцах":

Все данные, которые должны быть доступны ВНУТРИ класса, должны находится внутри класса и только внутри (под внутри имеется ввиду файл сpp).
Если это - куча константных данных, то внутри соотв. cpp файла (const или constexpr), о чем я писал в самом начале.
Доступ к этим данным должен осуществляться ЧЕРЕЗ соотв. методу, но напрямую - НИКОГДА.
Размещать их внутри объявления класса - НЕПРАВИЛЬНО. И соотв. также неправильно давать возможность напрямую к ним обращаться извне класса.
Вообще, объявление класса (соотв. файл hpp) должно иметь минимально возможный размер, иначе сильно ухудшается читаемость и сопровождение.
Т.е. в идеале объявление классов должно состоять ТОЛЬКО из методов и private (реже protected) полей, которые, разумеется не могу быть const.
Поля ни в коем случае НЕ ДОЛЖНЫ быть static.


--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
Go to the top of the page
 
+Quote Post
С дуба рухнул
сообщение Aug 6 2018, 18:11
Сообщение #19





Группа: Участник
Сообщений: 12
Регистрация: 6-08-18
Пользователь №: 106 507



Вы по существу семантики скажете когда нибудь что нибудь? Не надо мне о дизайне. Хотя если знаете что нибудь, напишите. А то продемонстрировать "я дартаньян, майкрософт дебилы" а в итоге уйти на общий треп "это не с++ это плохой дизайн, читал я банду четырех, не согласен со всеми четырьмя, колхоз " - это я сам могу. Пожалуйста, не отвечайте мне более, тем более вы меняете свои ответы задним числом, после возражений на них, это неприятно. "Доступ к этим данным должен осуществляться ЧЕРЕЗ соотв. методу, но напрямую - НИКОГДА." Вы просто начитались книжек. Для начала эти данные надо создать, причем я уже показал, вполне себе константно. Вы с вашими геттерами-сеттерами тут вообще мимо кассы

Сообщение отредактировал С дуба рухнул - Aug 6 2018, 18:14
Go to the top of the page
 
+Quote Post
Forger
сообщение Aug 6 2018, 18:20
Сообщение #20


Профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 22-02-05
Пользователь №: 2 831



Цитата(С дуба рухнул @ Aug 6 2018, 21:11) *
Вы по существу семантики скажете когда нибудь что нибудь?

Если выше был приведен гипотетический пример, то я объяснил, ЧТО ИМЕННО нужно делать. Читайте внимательнее.
Если же это - конкретная задача и конкретный код, то все это реализуется БЕЗ классов и т.п. сложностей, присущих плюсам. и реализуется на базе банальной const struct.

Цитата
Для начала эти данные надо создать, причем я уже показал, вполне себе константно.

Приведите КОНКРЕТНЫЙ пример, как это все будет применяться в коде. Именно исходя из этого и нужно решать задачу. И с этого и нужно было начинать!

Цитата
Вы просто начитались книжек.
Вот именно поэтому я знаю, что внутри объявления класса нельзя создать const поле с конкретным значением, а вы - не знали. Но теперь знаете ))
Но можно в объявлении класса вместо static const записатьstatic constexpr и ошибок не будет. Вот только нет никакой объективной причины включать все эти нагромождения данных внутри объявления класса.
Для этого просто создается соотв. метод, который будет возвращать нужные данные, а сами данные храняться внутри соотв. cpp файла в виде тех же const struct.


--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
Go to the top of the page
 
+Quote Post
XVR
сообщение Aug 6 2018, 18:56
Сообщение #21


Гуру
******

Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847



Цитата(С дуба рухнул @ Aug 6 2018, 17:25) *
Мне нужны константные пары, общие для всего класса, то бишь статики. Ничего в конструкторы пихать не надо, все считается при компиляции.
Именно это вы и привели в самом первом сообщении. Что не устроило?

Go to the top of the page
 
+Quote Post
С дуба рухнул
сообщение Aug 6 2018, 19:51
Сообщение #22





Группа: Участник
Сообщений: 12
Регистрация: 6-08-18
Пользователь №: 106 507



Цитата(Forger @ Aug 6 2018, 18:20) *
Вот именно поэтому я знаю, что внутри объявления класса нельзя создать const поле с конкретным значением, а вы - не знали. Но теперь знаете ))

Код
class T
{
private:
    const int m_i = 5;
};

Не вопрос вообще. Теперь я знаю, что это Вы мало что знаете?

Цитата(XVR @ Aug 6 2018, 18:56) *
Именно это вы и привели в самом первом сообщении. Что не устроило?

Синтаксис и только. Подумал, что может есть что то типа with из Дельфи (выше писал) или как-то иначе.
Код
//header
typedef enum { ACC_05, ACC_10 } eMeterAccuracy;
template <class T> struct INFOTYPE
{
    T type;
    string desc;
    bool isVer;// optional
};
static const INFOTYPE <eMeterAccuracy> meterAccuracyInfo[];
// cpp

const CProduction::INFOTYPE <CProduction::eMeterAccuracy> CProduction::meterAccuracyInfo[] = {
    {ACC_05, "0.5"},
    { ACC_10, "1.0" },

Какое - то нагромождение уточнения области CProduction:: каждый раз
Нет чего нибудь навроде
with CProduction {
const INFOTYPE <eMeterAccuracy> meterAccuracyInfo[] =
};
? Или вообще других методов создания таких таблиц, не падая до дефайнов, непривязанному ни к какому классу кода и подобным вещам?
Go to the top of the page
 
+Quote Post
Forger
сообщение Aug 6 2018, 20:12
Сообщение #23


Профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 22-02-05
Пользователь №: 2 831



Цитата(С дуба рухнул @ Aug 6 2018, 22:51) *
Код
class T
{
private:
    const int m_i = 5;
};

Не вопрос вообще. Теперь я знаю, что это Вы мало что знаете?

По-ходу все же придется разжевать и положить в рот ...

Итак, если не хотите, что этот m_i создавался в памяти для КАЖДОГО экземпляра этого класса, то нужно добавлять перед ним static.
Да, конечно, static можно добавить перед "простыми" типами, это решает "проблему" с памятью:

Код
class Test1
{
  const int z = 10;
};

class Test2
{
  static const int z = 10;
};

sizeof (Test1) = 4 байт;
sizeof (Test2) = 1 байт;


Но этот static НЕЛЬЗЯ добавить перед типами, например, float или структурами
Для тех кто не понял - речь идет про инициализацию полей класса прямо в объявлении класса.

Код
class Test1
{
  const float pi = 3.14;
};

class Test2
{
  static const float pi = 3.14;
};

class Test3
{
  static constexpr float pi = 3.14;
};

sizeof (Test1) = 4 байт;
sizeof (Test2) - error: in-class initializer for static data member of type 'const float'
sizeof (Test3) = 1 байт;


Все то же самое касается структур:
Код
struct Coord  
{
    int x;
    int y;
};

class Test1
{
    const Coord coord = { 0, 1 };
};

class Test2
{
       static const Coord coord = { 0, 1 };
};

class Test3
{
    static constexpr Coord coord = { 0, 1 };
};

sizeof (Test1) = 8 байт;
sizeof (Test2) - error: in-class initializer for static data member of type 'const Coord'
sizeof (Test3) = 1 байт;


Теперь понятно, зачем я упоминал в этой теме constexpr? Надеюсь, переварите это уже самостоятельно.

Но повторюсь: по-мне не разумно тащить все это нагромождение констант через все объявление класса.
"Толстые" константные структуры, текстовые константы, лучше скрывать внутри соотв. cpp файлов.


--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
Go to the top of the page
 
+Quote Post
С дуба рухнул
сообщение Aug 6 2018, 20:30
Сообщение #24





Группа: Участник
Сообщений: 12
Регистрация: 6-08-18
Пользователь №: 106 507



Непонятно. Я о инициализации структур писал.
https://stackoverflow.com/questions/370283/...mber-in-a-class Пойду лучше на stackoverflow, там люди отвечают без наездов

Сообщение отредактировал С дуба рухнул - Aug 6 2018, 20:34
Go to the top of the page
 
+Quote Post

2 страниц V  < 1 2
Closed TopicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th April 2024 - 23:58
Рейтинг@Mail.ru


Страница сгенерированна за 0.01516 секунд с 7
ELECTRONIX ©2004-2016