Здравствуйте, Аноним, Вы писали:
А>А>class C
А>{
А>public:
А> C(int &i_, int *p_)
А> :
А> i(i_), p(p_)
А> {}
А> int &i;
А> int *p;
А>};
А>int main(int argc, char* argv[])
А>{
А> int i = 9;
А> const C c (i,&i);
А> c.i = 1; // <--- тут возникает желание дать компилятору по рукам
А> *(c.p) = 1; // <--- тут особо не возникает
А> return 0;
А>}
А>
А>Код вызывает странные ощущения. Как с ними быть?
Константность не заразна в данном контексте. То есть не передаётся от C к содержимому по ссылке C::i.
Следует либо смириться, что всё так, либо убрать члены-данные в private и соорудить к ним accessor’ы (на которые будет распространяться константность), либо сделать два класса — C с полным интерфейсом и const_C с тем его подмножеством, которое применимо к константным объектам (см. STL iterator и const_iterator).