2009-11-08 3 views
0

Можно ли использовать частные статические переменные для установки инвариантов в вашем классе?Частные статические переменные для установления инвариантов

Ex:

class MovingObject 
{ 
public: 
    //...Stuff 
private: 
    // Invariants 
    static const double VELOCITY; // Moving objects always move at this velocity 
    // etc. for any other invariants 
    //... 
} 
--------------------------------------------------------------------------------- 
#include "MovingObject.h" 
// Invariants 
const double MovingObject::VELOCITY = 256.5; 
//etc. 
+1

Интересная статья по теме. http://www.stanford.edu/~pgbovine/programming-with-rep-invariants.htm – Anonymous

+0

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

ответ

1

Несомненно. Это распространенная идиома на нескольких языках OO, включая Java.

+0

Спасибо. Я спрашиваю, потому что я читал о возможных проблемах, которые могут возникнуть, если вы попробуете многопоточность со статикой. – Anonymous

+0

Проблемы с статикой на C++ чаще всего появляются, когда вы читаете и пишите им. Вы уже объявили 'VELOCITY'const, что подразумевает, что вы только читаете его. Чтение доступа из нескольких потоков прекрасно, если ничто не может изменить их из-под вас. –

0

Да, хотя те, которые обычно называются 'постоянными'. См. Статью anon, связанную для обсуждения «инварианта», поскольку она обычно используется в объектно-ориентированном дизайне.

Смежные вопросы