С ++ и объектно-ориентированное в изменяемом сопзЬ
В этой статье я запись для объектно-ориентированного сопзЬ (постоянного) и изменчивых (переменного) понимается
Const
- константные функции-члены прикладывают к спине (и указано в декларации и определения)
Идея заключается в том, чтобы сообщить компилятору, что эта функция не изменяет содержимое членов класса объекта класса. Посмотрите на код:
int sum(const Test &t){
int start = t.beg_pos();
int len = t.length();
int res = 0;
for(int i=0;i<len;++i){
res += t.elem(start+i);
}
return res;
}
Код класса Т константные исходные параметры, так что мы должны убедиться , что т не будут изменены при вызове функции т. Но вызов функции, компилятор не знает , какая функция будет изменять содержимое т. Следовательно, он должен решить , нужно ли повышать сопзЬ, чтобы сообщить компилятору , будет ли эта функция изменить содержимое объекта после функции.
(Хотя компилятор не анализирует каждую функцию она является сопзЬ или неконстантным, но объявлен как сопз функции, он будет проверять , если какие - либо содержимое изменения объекта)
- В соответствии с функцией члена может быть перегружена или нет Const
Ниже эта категории мы предлагаем версию сопзИ и неконстантные функции версии Вала.
Неконстантная объект будет вызывать неконстантную версии (изменение содержимого объекта, не имеет значения), и будет вызывать версию константного объекта константной.
class Test{
public:
Test(const MyTest& val)
:_val(val){}
const Test& val()const{ return _val};
Test& val(){ return _val};
private:
MyTest _val;
};
изменчивый
В константный объект, мы не хотим, чтобы изменить содержимое объекта. Но в некоторых классах, которые мы должны сделать подобную проходимому изменение операции некоторых переменной, но на этот раз будет конфликтовать с Устами. Это то, что мы можем добавить перед изменяемых переменных, чтобы сообщить компилятору, чтобы изменить эту переменную не уничтожает объект постоянного секса.