Каково различие между чем-то вроде этого
friend Circle copy(const Circle &);
и что-то вроде этого
friend Circle copy(Circle&) const;
Я знаю константу после того, как функция используется, чтобы сказать компилятору, что эта функция не попытается изменить объект, к этому обращаются, что относительно другого?
Первая форма означает, что (состояние) Circle
объект, связанный со ссылкой, которая является параметром эти copy()
, функция не будет изменена copy()
через ту ссылку. Ссылка является ссылкой на const
, таким образом, не будет возможно вызвать функции членства Circle
через ту ссылку, которые самостоятельно не квалифицированы как const
.
вторая форма, с другой стороны, недопустима: только [1 117] функции членства могут быть const
- квалифицированы (в то время как, что Вы объявляете, существует глобальное, friend
функция).
, Когда const
квалифицирует функции членства, квалификация относится к неявному this
аргумент. Другими словами, той функции не позволят изменить состояние объекта, это вызывается на (объект, на который указывают неявным this
указатель) - за исключением [1 112] объекты, но это - другая история.
Для высказывания этого с кодом:
struct X
{
void foo() const // <== The implicit "this" pointer is const-qualified!
{
_x = 42; // ERROR! The "this" pointer is implicitly const
_y = 42; // OK (_y is mutable)
}
void bar(X& obj) const // <== The implicit "this" pointer is const-qualified!
{
obj._x = 42; // OK! obj is a reference to non-const
_x = 42; // ERROR! The "this" pointer is implicitly const
}
void bar(X const& obj) // <== The implicit "this" pointer is NOT const-qualified!
{
obj._x = 42; // ERROR! obj is a reference to const
obj._y = 42; // OK! obj is a reference to const, but _y is mutable
_x = 42; // OK! The "this" pointer is implicitly non-const
}
int _x;
mutable int _y;
};
Методы класса C++ имеют неявное this
параметр, который прибывает перед всеми явными. Так функция, объявленная в классе как это:
class C {
void f(int x);
можно вообразить, действительно похож на это:
void f(C* this, int x);
Теперь, если Вы объявляете это этот путь:
void f(int x) const;
Это - как будто Вы записали это:
void f(const C* this, int x);
таким образом, запаздывание const
делает this
константа параметра, означая, что можно вызвать метод на объекты константы типа класса, и что метод не может изменить объект, на который это было вызвано (по крайней мере, не по нормальным каналам).
Circle copy(Circle&) const;
делает функцию const
саму. Это может только использоваться для функций членства класса/структуры.
Создание функции членства const
означает, что
const
, объекты могут только звонить const
функции). Объекты неконстанты могут также звонить const
функция. Этот должен быть функцией членства класса' Круг '.
Теперь рассматривают следующий:
Circle copy(const Circle &);
, в то время как эти средства, которые передал параметр, не могут быть изменены в функции. Этот может или не может быть функцией членства класса.
ПРИМЕЧАНИЕ: возможно перегрузить функцию таким способом иметь const
и версия неконстанты той же функции.
Каждый обращается к параметру другому к функции.
Circle copy(const Circle &);
Это означает, что параметр передал в, не может быть изменен в функции
Circle copy(Circle&) const;
const
, квалифицированная функция используется для функций членства и означает, что Вы не можете изменить элементы данных самого объекта. Пример, который Вы отправили, был бессмыслен.
, Если мы переписываем первую функцию как Circle copy(Circle const&);
, что означает то же самое, становится ясно, что чтение справа налево становится полезным. copy
функция, которая берет const
ссылка на Circle
объект и возвращается Circle
объект ссылкой.
friend Circle copy(const Circle &);
//относится к постоянному параметру функции. наклон' изменение значение сохранен параметром.
Потребность удалить друга в Вашем примере Круговая копия (Circle&) константа; //не может изменить это значение poniter, названное как функция членства
Constantfriend Circle copy(const Circle &);
значение параметра не будет изменено во время вызовов функции.
friend Circle copy(const Circle &)const ;
функция является средством доступа, которое не изменяет значения участников класса. Обычно существуют к типам функций: средства доступа и мутаторы. Средство доступа: исследует, но не изменяет состояние его объекта.