Re: ссылка-член констатного объекта
От: Centaur Россия  
Дата: 30.07.07 06:19
Оценка: 72 (1)
Здравствуйте, Аноним, Вы писали:

А>
А>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).
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.