메소드 선언 후 const 수정자는 무엇을 의미합니까? - 페이지 4

 
Dmitry Fedoseev :
자신의 것이 아니라 완전히 이방인이며 유형 만 동일합니다.

당신의 것이 아닌 것은 무엇입니까? 같은 유형은 무엇입니까?

상수 메서드 가 다른 클래스를 변경할 수 없다는 말씀이신가요?

그리고 답변 하실때 좀 더 자세히 적어주세요, 무슨 말을 하려는지 이해가 되지 않았습니다.

 
Alexey Kozitsyn :

당신의 것이 아닌 것은 무엇입니까? 같은 유형은 무엇입니까?

상수 메서드 가 다른 클래스를 변경할 수 없다는 말씀이신가요?

그리고 답변 하실때 좀 더 자세히 적어주세요, 무슨 말을 하려는지 이해가 되지 않았습니다.

당신이 무엇을 쓰고 있는지 명확하지 않습니다. 그것은 다른 사람의 클래스를 자신과 동일한 유형의 모든 유형으로 변경할 수 있습니다.
 

간단한 경우. 상수 메서드 에서는 이 상수 메서드와 동일한 클래스에서 선언된(또는 부모에서 선언된) 변수의 값을 변경할 수 없습니다. 그래서?

 
Dmitry Fedoseev :
당신이 무엇을 쓰고 있는지 명확하지 않습니다. 그것은 다른 사람의 클래스를 자신과 동일한 유형의 모든 유형으로 변경할 수 있습니다.

당신이 쓰는 것을 아직도 볼 수 있습니까? 이 메서드는 클래스를 어떻게 변경할 수 있습니까? 아마도 클래스 객체 ?

그리고 그 질문은 다음과 같은 성명서에 있었습니다.

const 메서드는 클래스의 멤버를 변경할 수 없습니다.

알렉세이가 무엇을 바꿀 수 있는지에 대한 예시를 들어주었기에 그 말이 사실이 아닌 것 같아서 바실리의 의견을 듣고 싶었다.

 
Alexey Kozitsyn :

당신이 쓰는 것을 아직도 볼 수 있습니까? 이 메서드는 클래스를 어떻게 변경할 수 있습니까? 아마도 클래스 객체 ?

그리고 그 질문은 다음과 같은 성명서에 있었습니다.

알렉세이가 무엇을 바꿀 수 있는지에 대한 예시를 들어주었기에 그 말이 사실이 아닌 것 같아서 바실리의 의견을 듣고 싶었다.

아니면 더 사려 깊게 읽을 것입니까? - " 선언된 변수 의 값 변경"

Alexei의 진술에 대해 어떻게 말할 수 있습니까? 그는 주장할 뿐만 아니라 실제로 확인하고 예를 들었습니다. 편집기에 던지고 컴파일할 때와 컴파일하지 않을 때를 볼 수 있습니다.

 
Dmitry Fedoseev :

간단한 경우. 상수 메서드 에서는 이 상수 메서드와 동일한 클래스에서 선언된(또는 부모에서 선언된) 변수의 값을 변경할 수 없습니다. 그래서?

아니요. 각 클래스 개체에는 이 클래스에 선언된 고유한 변수 집합이 있다는 것을 알고 있습니까? 그리고 상수 메서드는 호출된 개체(즉, 집합)만 변경할 수 없습니다.
 
Alexey Kozitsyn :

당신이 쓰는 것을 아직도 볼 수 있습니까? 이 메서드는 클래스를 어떻게 변경할 수 있습니까? 아마도 클래스 객체 ?

..

이와 같이:

     void bar(X& obj) const 
    {
        obj._x = 42 ; // OK! obj передается по ссылке и не имеет модификатора const
}

    

 
Alexey Kozitsyn :
아니요. 각 클래스 개체에는 이 클래스에 선언된 고유한 변수 집합이 있다는 것을 알고 있습니까? 그리고 상수 메서드는 호출된 개체(즉, 집합)만 변경할 수 없습니다.
그리고 도전은 어떻습니까? 중요한 것은 메서드와 변수의 위치입니다. 메서드와 변수가 같은 클래스에 있으면 변경할 수 없습니다. 클래스가 참조로 매개변수로 전달되면 그렇게 할 수 있습니다.
 
struct X
{

int _x, _y;
    
void foo() const 
    {
        _x = 42 ; // ERROR! метод объявлен, как const, не можем менять члены 
        _y = 42 ; // ERROR! 
    }

     void bar( Z & obj) const 
    {
        obj._x = 42 ; // OK! obj передается по ссылке и не имеет модификатора const
        _x = 42 ; // ERROR!
    }

     void bar( Z const & obj) 
    {
        obj._x = 42 ; // ERROR! obj передается по ссылке, как const
        obj._y = 42 ; // ERROR! obj передается по ссылке, как const
        _x = 42 ; // OK! метод объявлен без const на сонце
    }

   
};
그래서 더 명확해질 것입니다.
 
Dmitry Fedoseev :
그리고 도전은 어떻습니까? 중요한 것은 메서드와 변수의 위치입니다. 메서드와 변수가 같은 클래스에 있으면 변경할 수 없습니다. 클래스가 참조로 매개변수로 전달되면 그렇게 할 수 있습니다.
클래스 A의 object1이 클래스 A의 상수 메서드 호출하는 경우 이 메서드는 이 object1(즉, 호출한 object1)을 변경할 수 없다는 사실에도 불구하고 여기에서 호출합니다. object1이 동일한 상수 메서드에 대한 참조로 전달되었지만 클래스 A의 object2에서 호출된 경우 object1이 변경될 수 있습니다. Object2는 그렇지 않습니다.